[英]Performance diagnostics improves performance
我在Visual Studio 2013中遇到了一个奇怪的异常。我在我的程序上运行性能分析(使用CPU采样),我发现在某些情况下,程序在分析时运行得更快。 在需要使用较少量数据的情况下,性能分析似乎可以提高程序的性能。 该程序使用并行扩展(C#和LINQ)并行化。
我的假设是这与并行性和少量数据有关。
有没有人有这种情况或任何人可以解释可能是什么原因?
运行探查器时,将不会附加调试器。 附加调试器可防止在运行程序时发生大量优化,这主要是因为您在调试过程中会丢失您可能想要了解的信息。
这是一个简单的例子。
void SomeFunction()
{
var foo = new SomeTypeThatTakesUp1GBOfRam();
DoSomthingWithFoo(foo);
for(int i = 0; i < 10000; i++)
{
Thread.Sleep(1000);
}
}
当你附加了调试器时, foo
不能被垃圾收集,直到它超出函数底部的范围(这需要相当长的时间)。 如果你没有足够的调试器附着foo
将尽快有资格作为垃圾进行回收DoSomthingWithFoo(foo)
返回。
它必须等待收集它的原因是如果你在for循环的第2000个循环上暂停调试器并想看到foo
的值? 如果垃圾收集器尚未收集变量,则只能这样做。 如果未附加调试器,则运行时知道在任何以后的任何时间点都不会“需要查看” foo
,因此它会将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.