首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >性能诊断提高性能

性能诊断提高性能
EN

Stack Overflow用户
提问于 2014-02-27 23:08:31
回答 1查看 77关注 0票数 1

我在Visual 2013中遇到了一个奇怪的异常。我正在我的程序上运行性能分析(使用CPU采样),我发现,在某些情况下,程序在被分析时运行得更快。在需要处理较小数据量的情况下,性能分析似乎可以提高程序的性能。该程序使用并行扩展(C#和LINQ)并行化。

我的假设是,这与并行性和少量数据有关。

有没有人发生过这种情况,或者谁能解释原因?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 23:14:29

当您运行分析器时,调试器将不会被附加。安装调试器可以防止在运行程序时发生许多优化,这主要是因为您可能会在调试过程中丢失您想要知道的信息。

下面是一个简单的例子。

代码语言:javascript
复制
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,因此就会将其清除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22082668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档