我有一个简单的类MyDataClass,其成员(obj)实现了IDisposable:
public class MyDataClass : IDisposable
{
private DisposableObject obj;
private List<string> list;
private int c;
public MyDataClass()
{
obj = new DisposableObject();
list = new List<string>();
c = 114;
}
public void Dispose()
{
obj.Dispose();
}
}
public class DisposableObject : IDisposable
{
public void Dispose()
{
// Free resource
Console.WriteLine("Dispose DisposableObject");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码分析时,我得到了CA1063警告,它告诉我应该在MyDataClass实现中的Dispose()方法中调用GC.SuppressFinalize()方法.
我对这个CA1063警告感到很困惑.因为据我所知,我应该调用GC.SuppressFinalize()来指示垃圾收集器:
"嘿GC,不要担心这个对象,因为我已经为你完成了所有的清洁工作!"
所以请确认我是否错了.如果我将添加GC.SuppressFinalize()我将摆脱CA1063但它将导致GC不会清理我的对象.所以我会有内存泄漏,因为其他类成员(托管代码)将不会被清除.
我有一个简单的ConsoleProgram,它创建了一个包含80个IDisposable对象的列表.该对象包含两个System.Threading.ManualResetEvent在该Dispose()方法中关闭的对象.请考虑以下代码:
public class Program
{
private static void Main(string[] args)
{
Console.ReadLine();
Test(80);
Console.WriteLine("end.");
Console.ReadLine();
}
private static void Test(int c)
{
Console.WriteLine("Test start.");
List<TestObject> list = new List<TestObject>();
for (int i = 0; i < c; i++)
list.Add(new TestObject());
Console.WriteLine("End of adding. Added: {0} items.", c);
Console.ReadLine();
foreach (TestObject obj in list)
obj.Dispose();
list = null;
Console.WriteLine("Dispose end.");
}
public class TestObject : IDisposable
{
public ManualResetEvent mr1 = new ManualResetEvent(true);
public ManualResetEvent mr2 = …Run Code Online (Sandbox Code Playgroud)