試試這個:
運行5分鐘紮實,仍然沒有例外......你確定你的代碼不引用你的對象的地方?
using System;
internal class Program
{
private static void Main(string[] args)
{
int cnt = 0;
while (true)
{
++cnt;
bool gced = false;
Action handler =() => gced = true;
new Foo(handler);
GC.Collect();
GC.WaitForPendingFinalizers();
Console.Out.WriteLine("{0} : {1}", cnt, gced);
if (!gced)
{
throw new Exception("WTF?");
}
}
}
}
class Foo
{
private readonly Action _onFinalized;
public Foo(Action finalized)
{
_onFinalized = finalized;
}
~Foo()
{
if (_onFinalized != null) _onFinalized();
}
}
你爲什麼單元測試此,它聽起來就像你正在編寫爲.NET Framework的內存管理單元測試。你究竟在做什麼測試? – 2010-08-13 10:47:08
@Ben Robinson,我正在進行單元測試,我不是不小心從一個靜態變量(例如緩存)引用我的對象,並且該對象可以被垃圾回收。我正在使用的系統有一個龐大的代碼庫和大量的可配置模塊,可能會導致我的對象被其他人編寫的代碼引用。 – Andrew 2010-08-13 10:48:21
[雷蒙德陳](http://blogs.msdn.com/b/oldnewthing/)目前有他的CLR周,他的話題本週聽起來有點類似於你的問題。 – Joey 2010-08-13 10:56:19