Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 性能问题跟踪程序_C#_Wpf_Performance_Performance Testing_Dottrace - Fatal编程技术网

C# 性能问题跟踪程序

C# 性能问题跟踪程序,c#,wpf,performance,performance-testing,dottrace,C#,Wpf,Performance,Performance Testing,Dottrace,我刚刚安装了dot tracer来监控我编写的一个大型自助服务亭管理器应用程序,现在正在解决它的性能问题。该解决方案包含近40个不同的项目,这些项目由主程序集加载(取决于客户的需求),主程序集是一个WPF可执行文件,在运行时使用反射 在一台3 GHz的机器上,它的性能是可以接受的,有3 GB的RAM和一个图形卡(CPU使用率的6%-12%,80 MB的RAM和GPU使用率的20%-40%),但3天前我在一台非常弱的机器上运行了它(0.6 GHz的CPU,1 GB的RAM和没有图形卡),其中一个客

我刚刚安装了dot tracer来监控我编写的一个大型自助服务亭管理器应用程序,现在正在解决它的性能问题。该解决方案包含近40个不同的项目,这些项目由主程序集加载(取决于客户的需求),主程序集是一个WPF可执行文件,在运行时使用反射

在一台3 GHz的机器上,它的性能是可以接受的,有3 GB的RAM和一个图形卡(CPU使用率的6%-12%,80 MB的RAM和GPU使用率的20%-40%),但3天前我在一台非常弱的机器上运行了它(0.6 GHz的CPU,1 GB的RAM和没有图形卡),其中一个客户端的CPU使用率超过了60%,所以我突然想到要找出瓶颈是什么! 无论如何,dot tracer告诉我,大部分时间都花在等待上(主要是
Thread.Sleep
部分),因为我的应用程序有不同的线程,它们在某些循环中等待某些事情发生(例如,套接字上的传入消息、设备上的按键等)

那么,我的应用程序使用的是
Thread.Sleep()
,这不好吗?我还有其他选择吗


以下是测试结果:

再次运行探查器。睡眠不会对CPU造成60%的影响(除非您的线程睡眠非常频繁,而且睡眠时间很短,以至于只执行旋转,但是……除非您正在处理几乎实时的数据,否则这种情况很少发生)。顺便说一句,这只是意味着该函数执行非常频繁(在分析采样期间),并不意味着它使用了大量CPU。事实上,睡眠应该减少CPU,是什么让你认为它会消耗CPU?旁注:使用eventwaithandles不睡眠来使用信号。这不是与绘制/构建GUI有关的CPU使用情况吗?获取像客户端的机器一样脆弱的机器,并在那里对其进行分析。@Adriano使用睡眠的线程的主要结构类似于'while(flag){/*Do some work*/Thread.sleep(1000);}它是否有助于诊断问题的原因?从您的角度来看,它是否被认为是“非常频繁的”?Adriano您是对的,朋友。dottracer只是对执行流进行采样,并告诉您哪些函数被调用的频率更高,因此它并不表示性能差。