微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 启动VS Profiler可提升应用程序性能x20?

编辑1
我根本不排除这可能是由于使用Profiler的一些非常基本的副作用(我的“常规”项目中的一些错误设置)

我想在我的应用程序中改进计算时间,所以我决定进行全面的分析分析.
所以我刚刚启动了.Net内存分配配置文件来分析我的应用程序.我完全惊呆了,观看计算速度快了20倍!

应用程序包括使用BackgroundWorkers从二进制文件读取数据,处理它们,并将结果存储到MSsql DB中.每轮通常需要20秒,而分析它几乎需要1秒.我检查并确保结果在两种情况下都是一致的.

一个.Net实验的朋友告诉我,探查器优化了线程并“以某种方式”找到了通过线程锁和瓶颈的方式,但我简直不敢相信.

所以我的问题是:


>究竟发生了什么,现在和为什么?
>如何使我的代码本机行为?

编辑2
我知道这听起来很疯狂,令人难以置信.我自己仍然非常怀疑.但它是真的.
在分析器运行时,SAME代码运行得非常快.
我使用SAME测试数据,并观察SAME计算输出.
我无法给出一个简单的复制项目,因为它是一个相对较大的框架.
我正在使用Visual Studio 2010 Profiler.
我将尽可能多地提供关于流程的详细信息,一旦找到它,我肯定会发布一条线索.

定期运行日志:
03/23/2011 18:04:34 | 180434.621 |模拟集[5] – [1] – [5 PC-1 0 [SET 1/48]
03/23/2011 18:05:01 | 180501.271 |处理时间:00:00:26.6515244
等等..

Profiler运行LOGS:
03/24/2011 11:38:15 | 113815.592 |模拟集[5] – [1] – [5 PC-1 0 [SET 1/48]
03/24/2011 11:38:17 | 113817.350 |处理时间:00:00:01.7581005
等等..

编辑3:线索
好的确定我的坏(我在编辑1上警告这种可能性,因为这太令人难以置信了.抱歉)@Watts建议检查我是否处于调试或发布模式.
我已经做过了.但@SNowBear指出有两个不同的东西:运行调试版软件和在调试器下运行软件
我确保构建和执行中的活动配置是RELEASE是VS2010.但是,由于我刚刚疯狂,我决定直接从bin / release中的exe文件启动应用程序.而且……过程每个过程需要1秒钟.
运行Profiler会使您退出调试模式(无论您处于发布模式还是调试模式)
这让我感到困惑.
感谢All Case Closed.

解决方法

使用调试器运行会禁用jit优化.如果你运行exe,通常会启用jit优化.将调试器附加到这样一个正在运行的应用程序允许您使用启用的优化进行调试.

Release-Build vs debug-build有两个结果:

>条件编译器符号是(un)定义的>它启用/禁用C#=>中的优化. IL编译.

原文地址:https://www.jb51.cc/csharp/99032.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐