gpt4 book ai didi

c#-4.0 - 如果封闭方法即将返回,我是否需要停止秒表?

转载 作者:行者123 更新时间:2023-12-04 07:39:41 24 4
gpt4 key购买 nike

请考虑以下方法:

DoTimeIntensiveOperation()
{
var t = new Stopwatch();

foreach(var element in a_very_long_array)
{
DoATimeConsumingTask(element);
}

Console.WriteLine("Took me " + t.Elapsed);
return;
}

我需要在返回之前调用 t.Stop()吗?

据我所知,垃圾收集器将销毁没有引用链返回主方法的所有内容。对创建的 Stopwatch的唯一引用是 t,因此,当 DoTimeIntensiveOperation时, t将被释放,并且 Stopwatch应该可以销毁。但是,它仍在“滴答作响”这一事实是否会干扰GC?

最佳答案

不,我进行了这项快速测试,似乎一旦运行GC,秒表就会被破坏。 (请自行更正代码)

 static void Main(string[] args)
{
DoTimeIntensiveOperation();

GC.Collect();
while (swRef.IsAlive)
{
}
Console.WriteLine("Destroyed");
}

static WeakReference swRef = null;
static void DoTimeIntensiveOperation()
{
Stopwatch sw = new Stopwatch();
sw.Start();
swRef = new WeakReference(sw);
return;
}

调用 Destroyed时,输出为 GC.Collect。当然,在实际程序中,您不太可能显式调用 GC.Collect,但这是为了表明即使没有调用 Stop,一旦超出方法范围,秒表对象也将被销毁。

关于c#-4.0 - 如果封闭方法即将返回,我是否需要停止秒表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134253/

24 4 0