我正在调查特定操作完成所需的时间.操作如下:
Parallel.ForEach(items, item => SaveScheme(item));
Run Code Online (Sandbox Code Playgroud)
该SaveScheme方法适用于数据库:执行一些查询并处理信息.items收集中的元素数量可以足够大.
当我运行此操作时,大约需要20-40秒才能完成.但是当我打开一个配置文件运行它时,它只需要3秒!
我没有找到有关此问题的任何信息.我唯一的猜测是,分析Parallel.ForEach创建的线程多于没有它的线程,但我不确定,即使它是真的,我也不知道如何处理它.
那么,为什么会发生这种情况呢?当我在没有分析的情况下运行应用程序时,我怎样才能达到这种性能?
UPD.Parallel与此无关:我用简单测试,foreach操作仍然在3秒内完成!
我有一个相对较大的系统(到目前为止约25000行)用于监控无线电相关设备.它使用最新版本的ZedGraph显示图表等.该程序使用Win7上的VS2010上的C#进行编码.问题是:
我希望程序能够快速运行!
解决方案中的每个项目都设置为RELEASE,Debug非托管代码为DISABLED,定义DEBUG和TRACE常量为DISABLED,优化代码 - 我尝试了,警告级别 - 我试过,抑制JIT - 我试过,或者我试过所有StackOverflow上已经提出的解决方案 - 没有成功.程序在分析器外部很慢,在分析器中很快.我不认为问题出在我的代码中,因为如果我将探查器附加到其他不相关的进程中它会变得很快!
请帮忙!我真的需要它在各地快速,因为它是一个关键业务应用程序和性能问题是不能容忍的...
更新1 - 8跟随
-------------------- UPDATE1:--------------------
问题似乎与ZedGraph无关,因为在我用自己的基本绘图替换ZedGraph之后它仍然存在.
-------------------- UPDATE2:--------------------
在虚拟机中运行该程序,该程序仍然运行缓慢,并且从主机运行的探查器不会使它快速.
-------------------- UPDATE3:--------------------
启动屏幕捕获到视频也可以加快程序的速度!
-------------------- UPDATE4:--------------------
如果我打开英特尔图形驱动程序设置窗口(这个东西:http://www.intel.com/support/graphics/sb/img/resolution_new.jpg),只是不断地将光标悬停在按钮上,这样它们就会发光,等等,我的节目加快了!如果我运行GPUz或Kombustor,它不会加速,因此没有GPU上的超频 - 它保持稳定850Mhz.
-------------------- Update5:--------------------
测试不同的机器:
- 在配备Intel HD2000的Core i5-2400S上,UI运行缓慢,CPU使用率约为15%.
- 在配备英特尔G41 Express的同事的Core 2 Duo上,UI运行速度很快,但CPU使用率约为90%(这也不正常)
- 在配备专用Radeon X1650的酷睿i5-2400S上,UI运行速度极快,CPU使用率约为50%.
-------------------- Update6:--------------------
一段代码,显示我如何更新单个图形(graphFFT是ZedGraphControl易于使用的封装):
public void LoopDataRefresh() //executes in a new thread
{
while (true)
{
while (!d.Connected)
Thread.Sleep(1000);
if (IsDisposed)
return; …Run Code Online (Sandbox Code Playgroud)