jjzjj

c# - 在静态类中声明的对象何时会被垃圾回收?

publicstaticclassstClass{staticClass1obj=newClass1();publicstaticintreturnSomething(){return0;}}如果我正在调用静态函数stClass.returnSomething()在其他一些非静态类中?注意:Class1不是静态的 最佳答案 从不,如obj不执行IDisposable.如果你的意思是什么时候obj获得垃圾收集那么答案仍然是永远不会-静态字段永远不会被垃圾收集,因此obj的对象如果您设置obj,引用将仅符合垃圾收集条件为空(或其他一些对

c# - 处理问题

我有许多类具有实现IDisposable的私有(private)成员变量(计时器、画笔等)。我是否需要采取任何措施来确保.NETFramework正确清理这些变量?我看到的文献是指“托管资源”与“非托管资源”。这些术语让我感到困惑,因为您可以拥有一个使用非托管资源实现功能的托管类。这被认为是“非托管资源”还是“托管资源”?我的理解是,如果您不在实现IDisposable的对象上调用Dispose(),那么在应用程序退出之前不会释放资源。这种情况在长时间运行程序时会导致OutOfMemory异常。我如何确定我的代码正确地处理了资源管理?这对这些对象很重要,因为它们是自定义控件,并且可能有

c# - 误报 : Fix this implementation of IDisposable to conform to the dispose pattern

我的类实现了IDisposable并遵循了的模式publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}但sonar仍然告诉我需要实现处置模式...https://sonarqube.com/issues#issues=AVtsPLjmtpYg8Dj4z0MU这是Sonar的缺陷还是我遗漏了什么? 最佳答案 我看到你已经解决了这个问题,但如果其他人有同样的问题,我会详细说明规则要求。这条规则的想法是允许潜在的派生类正确地处理你的类的成员。因此,如果您的类是密封的,则该

c# - 为什么 IDisposable 实现是这样设计的

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭4年前。Improvethisquestion让我们来看看臭名昭著的IDisposable接口(interface):[ComVisible(true)]publicinterfaceIDisposable{voidDispose();}和一个典型的实现,如MSDN所推荐的(我省略了当前对象是否已经被释放的检查):publicclassBase:IDisposable{protectedvirtualvoidDispose(booldisposing

c# - 为什么我们需要在某些对象上使用 Dispose() 方法?为什么垃圾收集器不做这项工作?

问题是:为什么我们需要在某些对象上调用Dispose()?为什么垃圾收集器在超出范围时不收集对象?我试图理解为什么它是这样实现的。我的意思是,如果在垃圾收集器收集超出范围的对象时调用Dispose()会不会更容易。 最佳答案 垃圾收集器是不确定的-它会在对象不再被引用后某个时间点收集对象,但不能保证及时发生。与引用计数相比,这有很多好处,包括允许循环依赖和不在所有地方递增和递减计数器的性能优势。但是,这确实意味着对于应该及时清理的资源(例如数据库连接、文件句柄等-几乎所有内存以外的资源),您仍然需要显式处理资源。using语句使这变

c# - 如果它是 IDisposable,我可以 "inline"变量吗?

我是否必须这样做才能确保正确处理MemoryStream?using(MemoryStreamstream=newMemoryStream(bytes))using(XmlReaderreader=XmlReader.Create(stream)){returnnewXmlDocument().Load(reader);}或者是否可以内联MemoryStream使其超出范围?像这样?using(XmlReaderreader=XmlReader.Create(newMemoryStream(bytes))){returnnewXmlDocument().Load(reader);}

c# - 在 SQLDataReader 上使用

我知道我之前问过一个相关问题。我只是有另一个想法。using(SqlConnectionconn=newSqlConnection('blahblah')){using(SqlCommandcmd=newSqlCommand(sqlStatement,conn)){conn.open();//***doIneedtoputthisinusingaswell?***SqlDataReaderdr=cmd.ExecuteReader(){While(dr.Read()){//readhere}}}}论点是:由于SqlDataReaderdr对象不是像连接或命令对象那样的新对象,它只是指向c

c# - 在展开嵌套的 "Dispose"语句时处理 "using"抛出的异常

显然,在使用嵌套的using语句时,一些异常可能会丢失。考虑这个简单的控制台应用程序:usingSystem;namespaceConsoleApplication{publicclassThrowing:IDisposable{intn;publicThrowing(intn){this.n=n;}publicvoidDispose(){vare=newApplicationException(String.Format("Throwing({0})",this.n));Console.WriteLine("Throw:{0}",e.Message);throwe;}}classPr

c# - 如何一次处理面板或窗体中的所有控件??? C#

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:DoesForm.Dispose()callcontrolsinside'sDispose()?有办法吗?

c# - MSDN Dispose() 示例错误? (何时将托管引用设置为空)

用于实现Dispose()方法的MSDN'sexamplepattern描述了将对已处置托管资源的引用设置为null(_resource=null),但在if(disposing)之外执行此操作>阻止:protectedvirtualvoidDispose(booldisposing){//Ifyouneedthreadsafety,usealockaroundthese//operations,aswellasinyourmethodsthatusetheresource.if(!_disposed){if(disposing){if(_resource!=null)_resourc