相关疑难解决方法(0)

通过Visual Studio性能分析,应用程序运行得更快

我正在调查特定操作完成所需的时间.操作如下:

Parallel.ForEach(items, item => SaveScheme(item));
Run Code Online (Sandbox Code Playgroud)

SaveScheme方法适用于数据库:执行一些查询并处理信息.items收集中的元素数量可以足够大.

当我运行此操作时,大约需要20-40秒才能完成.但是当我打开一个配置文件运行它时,它只需要3秒!

我没有找到有关此问题的任何信息.我唯一的猜测是,分析Parallel.ForEach创建的线程多于没有它的线程,但我不确定,即使它是真的,我也不知道如何处理它.

那么,为什么会发生这种情况呢?当我在没有分析的情况下运行应用程序时,我怎样才能达到这种性能?


UPD.Parallel与此无关:我用简单测试,foreach操作仍然在3秒内完成!

.net c# parallel-processing performance profiling

18
推荐指数
1
解决办法
4458
查看次数

为什么我的C#程序在分析器中更快?

我有一个相对较大的系统(到目前为止约25000行)用于监控无线电相关设备.它使用最新版本的ZedGraph显示图表等.该程序使用Win7上的VS2010上的C#进行编码.问题是:

  • 当我从VS内部运行程序时,它运行缓慢
  • 当我从构建的EXE运行程序时,它运行缓慢
  • 当我通过Performance Wizard/CPU Profiler运行程序时,它会运行Blazing Fast.
  • 当我从构建的EXE运行程序,然后启动VS并将探查器附加到任何其他进程时,我的程序加速了!

我希望程序能够快速运行!

解决方案中的每个项目都设置为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:--------------------

一段代码,显示我如何更新单个图形(graphFFTZedGraphControl易于使用的封装):

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)

.net c# performance profiler zedgraph

14
推荐指数
2
解决办法
2371
查看次数