gpt4 book ai didi

.NET 版本的 Java 断言 : Unit tesing memory leaks

转载 作者:行者123 更新时间:2023-12-02 04:14:31 26 4
gpt4 key购买 nike

我正在尝试使用 .NET 4 编写单元测试,以确保在运行某些代码后可以对对象进行垃圾收集。在 Java 中,我会使用 assertGC 来确保收集到弱引用。如何为 .NET 编写这种类型的测试?

我试过保留 WeakReference到对象并调用GC.Collect() ,但正如您所料,有时我的对象被收集,有时却没有。请注意,这是针对单元测试,而不是生产代码。我不希望 GC.Collect() 在我的真实代码库中。

我正在使用 C#,但同样的答案也适用于 VB.NET。

最佳答案

试试这个:

稳定运行 5 分钟,仍然没有异常(exception)...您确定您的代码没有在某处引用您的对象吗?

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 版本的 Java 断言 : Unit tesing memory leaks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3476064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com