【发布时间】:2011-07-22 00:28:09
【问题描述】:
编辑 1
我完全不排除这可能是由使用 Profiler 的一些非常基本的副作用引起的(我的“常规”项目中的一些错误设置)
我想在我的应用程序中改进计算时间,所以我决定进行彻底的分析分析。
所以我刚刚启动了一个 .Net 内存分配分析来分析我的应用程序。
看到 计算速度提高了 20 倍,我完全惊呆了!
应用程序包括使用 BackgroundWorkers 从二进制文件中读取数据、处理它们、
并将结果存储到 MSSQL DB 中。每轮通常需要 20 秒,而在分析时几乎不需要 1 秒。我检查并确保两种情况下的结果都是一致的。
一位 .Net 实验过的朋友告诉我,分析器优化了线程,并且“不知何故”找到了通过线程锁和瓶颈的方法,但我简直不敢相信。
所以我的问题是:
- 究竟发生了什么、如何以及为什么?
- 如何让我的代码在本机上表现得像这样?
编辑 2
我知道这听起来很疯狂而且难以置信。我自己还是很怀疑的。但这是真的。
由探查器运行时,相同的代码运行得非常快。
我使用相同的测试数据,并观察相同的计算输出。
我无法给出一个简单的复制项目,因为它是一个比较大的框架。
我正在使用 Visual Studio 2010 Profiler。
我将提供尽可能多的有关流程的详细信息,并且在找到线索后肯定会立即发布。
定期运行日志:
2011 年 3 月 23 日 18:04:34 | 180434.621 |模拟套装 [5]-[1]-[5 PC-1 0 [SET 1/48]
2011 年 3 月 23 日 18:05:01 | 180501.271 | 处理时间:00:00:26.6515244
等等。
Profiler 运行日志:
2011 年 3 月 24 日 11:38:15 | 113815.592 |模拟套装 [5]-[1]-[5 PC-1 0 [SET 1/48]
2011 年 3 月 24 日 11:38:17 | 113817.350 | 处理时间:00:00:01.7581005
等等..
编辑 3:线索
好的,好的,我的错误(我在编辑 1 中警告过这种可能性,因为这太难以置信了。抱歉)@Watts 建议检查我是否处于调试或发布模式。
我已经完成了。但是@SnowBear 指出有两件事:运行调试版本的软件和在调试器下运行软件
我确保在 Build 和 Execution 中的活动配置都是 RELEASE 是 VS2010。但是,由于我刚刚发疯,我决定直接从 bin/release 中的 exe 文件启动应用程序。瞧……每个过程都需要 1 秒钟。
运行 Profiler 让您退出调试模式(无论您处于发布模式还是调试模式)
这就是让我感到困惑的原因。
感谢所有案件结束。
【问题讨论】:
-
在没有任何评论的情况下投反对票不是很方便
-
我不相信。分析器的重点并不是仅仅通过运行它们就可以使您的应用程序更快。您必须实际应用从运行它们中学到的东西来优化您的代码。 如果您希望任何人认真对待您,请发布一个小型重现项目和您正在使用的分析器的名称。(不是我的反对意见;我会坚持看您是否可以证实这一点。 )
-
@Spence : 我的生活真的有更好的事情要做
-
您确定不是在分析器下以发布模式运行应用程序,在 IDE 下以调试模式运行应用程序吗?
-
@Mika,关于您的最后一次编辑。有两种不同的东西 - 运行调试版本的软件和运行在调试器下的软件
标签: c# .net optimization profiling profiler