jjzjj

disposable

全部标签

c# - 如何在 C# 中的 Dispose() 方法中处理托管资源?

我知道Dispose()是为非托管资源设计的,当资源不再需要时应该被释放,而不用等待垃圾收集器完成对象。但是,在处置对象时,它会抑制垃圾收集器的终结(在下面的代码中为GC.SuppressFinalize(this);)。这意味着如果对象包含托管资源,我们也必须处理它,因为垃圾收集器不会清理它。在下面的示例代码中(来自MSDN),“Component”是一个托管资源,我们为此资源调用了dispose()(component.Dispose())。我的问题是,我们如何为托管资源的组件类实现这个方法?我们是否应该使用像Collect()这样的东西来戳垃圾收集器来清理这部分?任何想法将不胜感

c# - 为什么要调用 Dispose()?不会发生内存泄漏?

编辑:我的问题没有得到我正在寻找的主要答案。我不清楚。我真的很想知道两件事:不能调用Dispose()会导致内存泄漏吗?如果您有一个大型程序并且从不对任何IDisposable对象调用Dispose(),那么最糟糕的事情是什么?我的印象是,如果未对IDisposable对象调用Dispose(),可能会发生内存泄漏。根据关于此thread的讨论,我的看法是不正确的;如果未调用Dispose(),则不会发生内存泄漏。那为什么还要调用Dispose()呢?是否只是立即释放资源,而不是稍后释放资源?如果您有一个大型程序并且从不对任何IDisposable对象调用Dispose(),那么最糟糕

c# - .NET 反编译器区分 "using"和 "try...finally"

给定以下C#代码,其中Dispose方法以两种不同的方式调用:classDisposable:IDisposable{publicvoidDispose(){}}classProgram{staticvoidMain(string[]args){using(vardisposable1=newDisposable()){Console.WriteLine("using");}vardisposable2=newDisposable();try{Console.WriteLine("try");}finally{if(disposable2!=null)((IDisposable)dis

c# - 当你的实现是一个空方法时,你如何 "properly"实现 Dispose() (根据 FxCop)? (CA1063)

我有一个接口(interface)的实现,该接口(interface)扩展了IDisposable。在我的特定接口(interface)实现中,我不需要处理任何东西,所以我只有一个空的Dispose()方法。publicinterfaceIMyStuff:IDisposable{}publicMyStuffImpl:IMyStuff{publicvoidDispose(){}}现在在FxCop中,这会导致CA1063:Error,Certainty95,forImplementIDisposableCorrectly{Resolution:"Provideanoverridableim

c# - SqlTransaction.Commit() 之前的 SqlCommand.Dispose()?

在提交事务之前处理分配给事务的命令是否有效?我自己测试了以下代码,它似乎工作正常,但这是一个相当小的例子,所以如果有人肯定知道,我正在寻找确认。internalstaticvoidTestTransaction(){try{Program.dbConnection.Open();using(SqlTransactiontransaction=Program.dbConnection.BeginTransaction()){BooleandoRollback=false;for(inti=0;i 最佳答案 连接、事务和命令对象只是将命

C# - 删除事件处理程序 - FormClosing 事件或 Dispose() 方法

假设我通过.ShowDialog()方法打开了一个表单。在某些时候,我将一些事件处理程序附加到表单上的一些控件。例如//Attachradiobuttoneventhandlers.this.rbLevel1.Click+=newEventHandler(this.RadioButton_CheckedChanged);this.rbLevel2.Click+=newEventHandler(this.RadioButton_CheckedChanged);this.rbLevel3.Click+=newEventHandler(this.RadioButton_CheckedChan

c# - 在哪里调用在构造函数中创建的 IDisposable 的 Dispose()?

在何处为对象拥有的IDisposable对象调用Dispose()?publicclassMyClass{publicMyClass(){log=newEventLog{Source="MyLogSource",Log="MyLog"};FileStreamstream=File.Open("MyFile.txt",FileMode.OpenOrCreate);}privatereadonlyEventLoglog;privatereadonlyFileStreamstream;//Othermembers,usingthefieldsabove}我应该实现Finalize()吗?对于

c# - 什么时候需要 Dispose?

当你有这样的代码时:Bitmapbmp=newBitmap(100,100);Graphicsg=Graphics.FromImage(bmp);Penp=newPen(Color.FromArgb(128,Color.Blue),1);Brushb=newSolidBrush(Color.FromArgb(128,Color.Blue));g.FillEllipse(b,0,0,99,99);g.FillRegion(b,pictureBox1.Region);pictureBox1.BackColor=Color.Transparent;pictureBox1.Image=bmp;

c# - 告诉 FxCop 另一个方法正在调用 dispose

通常,当您处置私有(private)成员时,您可能会执行以下操作:publicvoidDispose(){varlocalInst=this.privateMember;if(localInst!=null){localInst.Dispose();}}局部赋值的目的是避免竞争条件,即另一个线程可能在null检查后将私有(private)成员赋值为null。在这种情况下,我不关心Dispose是否在实例上被调用了两次。我一直使用这个模式,所以我写了一个扩展方法来做到这一点:publicstaticvoidSafeDispose(thisIDisposabledisposable){if

c# - 调用 Dispose() 与对象超出范围/方法完成时的对比

我有一个方法,里面有一个try/catch/finalyblock。在tryblock中,我声明SqlDataReader如下:SqlDataReaderaReader=null;aReader=aCommand.ExecuteReader();在finallyblock中,手动处理的对象是那些在类级别设置的对象。那么实现IDisposable的方法中的对象,比如上面的SqlDataReader,它们会被自动释放吗?Close()在while循环执行后调用aReader以获取阅读器的内容(应该是Dispose(),因为调用关闭())。如果没有调用Close(),该对象是否会在方法完成或