C# 性能问题跟踪程序
我刚刚安装了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告诉我,大部分时间都花在等待上(主要是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和没有图形卡),其中一个客
Thread.Sleep
部分),因为我的应用程序有不同的线程,它们在某些循环中等待某些事情发生(例如,套接字上的传入消息、设备上的按键等)
那么,我的应用程序使用的是Thread.Sleep()
,这不好吗?我还有其他选择吗
以下是测试结果:再次运行探查器。睡眠不会对CPU造成60%的影响(除非您的线程睡眠非常频繁,而且睡眠时间很短,以至于只执行旋转,但是……除非您正在处理几乎实时的数据,否则这种情况很少发生)。顺便说一句,这只是意味着该函数执行非常频繁(在分析采样期间),并不意味着它使用了大量CPU。事实上,睡眠应该减少CPU,是什么让你认为它会消耗CPU?旁注:使用eventwaithandles不睡眠来使用信号。这不是与绘制/构建GUI有关的CPU使用情况吗?获取像客户端的机器一样脆弱的机器,并在那里对其进行分析。@Adriano使用睡眠的线程的主要结构类似于'while(flag){/*Do some work*/Thread.sleep(1000);}它是否有助于诊断问题的原因?从您的角度来看,它是否被认为是“非常频繁的”?Adriano您是对的,朋友。dottracer只是对执行流进行采样,并告诉您哪些函数被调用的频率更高,因此它并不表示性能差。