Tag: idisposable

理解一次性物体

我已经看过像这样的问题,甚至我发现了很多,其中任何一个都为我提出了这个问题。 我们假设我有这个代码: public class SuperObject : IDisposable { public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { } } 我是否需要在SuperObject上使用protected virtual void Dispose(bool) ? 因为那里真的没有什么可以处理的。 public interface ICustom : IDisposable { } public class Custom : ICustom { public SuperObject Super { get; protected set; } public Custom() { Super = […]

当所有成员都被明确处理时,类是否需要实现IDisposable?

试图了解何时需要实现IDisposable: 我写了一个小例子。 public class FileManager { private FileStream fileStream; public void OpenFile(string path) { this.fileStream = File.Open(path, FileMode.Open, FileAccess.Read); } public void CloseFile(string path) { if ( this.fileStream != null && this.fileStream.CanRead) { this.fileStream.Close(); } this.fileStream.Dispose(); } } // client var manager = new FileManager(); manager.Open(“path”); manager.Close(“path”); 此类是否需要实现IDisposable,因为它具有托管资源(FileStream),该资源保存在非托管资源(文件)上? 或者我不必实现IDisposable,因为我在课堂上清理? 困惑。

具有IDisposable且没有IDisposable的内存释放

在我的应用程序中,我有一个大的对象,每隔几秒就创建一次,我做了一些工作然后我不再需要它了。 我在任务管理器中看到,即使我没有对象的ant引用,ram大小也会上升,并且需要收集它。 我试图实现IDisposable,然后ram不断下降。 为什么是这样? 我不做GC.Collect我只是释放对象并告诉GC他不需要为我的对象调用终结器? 更新 这是我在IDIsposable对象中使用的代码: public void Dispose() { base.Dispose(); Dispoe(true); GC.SuppressFinalize(); } private void Dispoe(bool disposing) { //here i release unmanaged resources if (disposing) { //here i release all managed resources } } ~MyObject() { Dispose(false); } 在我的大对象中,我做了myObject.Dispose(); 在我不再需要他之后。 我的问题不是关于如何实现IDisposable,而是关于GC代的工作。 我只是想知道如何可能的情况之间的公羊大小差异的情况我做Dispoe我的对象情况我不会Dispoe我的对象。

处理ImageList

处理ImageList对象的适当方法是什么? 假设我有一个private ImageList imageList成员的类。 现在,在某些时刻,我执行以下代码: // Basically, lazy initialization. if (imageList == null) { imageList = new ImageList(); Image[] images = Provider.CreateImages(…); foreach (var image in images) { // Does the ‘ImageList’ perform implicit copying here // or does it aggregate a reference? imageList.Images.Add(image); // Do I need to do this? //image.Dispose(); } } return […]

关于IDisposable的问题

我的问题是为什么我需要IDisposable? 我有一个类消耗一些需要释放的资源。 我有两个选择 没有IDisposable class SomeUtilityClass { public Stop() { // free resources } } 使用IDisposable class SomeUtilityClass, IDisposable { public void Dispose() { // free resources } } 那我为什么需要IDisposable呢? 它没有如何命名该function。 class Program { public Main(..) { SomeUtilityClass _class = new SomeUtilityClass(); // clean up when we’ve done _class.Stop(); // OR _class.Dispose(); } }

在System.Windows.Form派生类中处置资源的位置?

我有一个表单,在我的构造函数中创建了一些我需要处理的可用资源。 但是,C#表单设计器已在Designer.cs文件中生成一个Dispose()方法,该方法似乎没有任何类型的用户挂钩。 所以我不知道我应该如何实现典型的IDisposable模式。 偶尔会创建此表单但从未显示过,因此使用Close事件无济于事。 有问题的对象不是IComponents ,所以我不能只将它们添加到this.components 。 我在哪里可以放置这个清理代码,并确保它在表单处理时运行?

在main()中为SerialPort添加事件处理程序

我尝试为接收的数据事件订阅一个事件处理程序。 好像我无法指定事件处理函数名称。 我不明白为什么 myComPort.DataReceived + = new SerialDataReceivedEventHandler(comPort_DataReceived); 给我错误信息。 这是问题所在,希望有人能回答。 一只忙碌的猫http://img827.imageshack.us/img827/5904/20120125102247.png 一只忙碌的猫http://img444.imageshack.us/img444/3855/20120125102202.png namespace serialport { public class Program { internal List portBuffer = new List(1024); static void Main() { //1. find available COM port string[] nameArray = null; string myComPortName = null; nameArray = SerialPort.GetPortNames(); if (nameArray.GetUpperBound(0) >= 0) { myComPortName = nameArray[0]; } else […]

使用use来处理嵌套对象

如果我有这样的嵌套对象的代码,我是否需要使用嵌套的using语句来确保SQLCommand和SQLConnection对象都正确处理,如下所示,或者如果实例化SQLCommand的代码在外部使用声明。 using (var conn = new SqlConnection(sqlConnString)) { using (var cmd = new SqlCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = cmdTextHere; conn.Open(); cmd.Connection = conn; rowsAffected = cmd.ExecuteNonQuery(); } }

我不太了解使用/ Disposable对象的工作原理

我问了一个关于从函数中返回一个Disposable( IDisposable )对象的问题 ,但我认为如果我在那里提出这个问题,我会讨论这个问题。 我创建了一些示例代码: class UsingTest { public class Disposable : IDisposable { public void Dispose() { var i = 0; i++; } } public static Disposable GetDisposable(bool error) { var obj = new Disposable(); if (error) throw new Exception(“Error!”); return obj; } } 我故意用这种方式编码,因为我打电话给: using (var tmp = UsingTest.GetDisposable(true)) { } 使用调试器,我注意到Dispose方法永远不会执行,即使我们已经实例化了一个Disposable对象。 如果我正确理解Dispose的目的,如果这个类实际上已经打开了句柄等,那么我们就不会在完成它们后立即关闭它们。 […]

取消Dispose方法中的任务

我有一个类可以产生可以无限期运行的各种任务。 处理此对象时,我想阻止这些任务运行。 这是正确的方法: public class MyClass : IDisposable { // Stuff public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { queueCancellationTokenSource.Cancel(); feedCancellationTokenSource.Cancel(); } } }