为什么我的测试Winforms应用程序似乎可以顺序运行?

时间:2019-01-24 10:25:09

标签: .net multithreading winforms vmware windows-server-2012

我有许多规格很高的VMWare Server 2012实例(32个CPU),但是运行某些应用程序时似乎出现性能问题。

因此,我创建了一个.net winforms EXE,该EXE一直循环运行直到到达计数器:

            do
            {
              mystring = counter++.ToString();  
            } while (counter != loops);

我在生产服务器上发现,我可以在1分钟内运行120万个循环。但是,当我运行该可执行文件的多个实例时,它只花了两倍的时间。

不用说,我运行的实例越多,花费的时间就越长。即。 10份保险大约需要11分钟。

当我查看CPU使用率时:     1个实例= 6%    10个实例,每个实例= 0.5%

所以,我的问题是..为什么服务器似乎按顺序而不是并行运行?是.Net问题吗?服务器配置问题? VMware问题?

1 个答案:

答案 0 :(得分:-1)

我认为这不是测试它的好方法。 基本上,您正在测试用户界面,并且认为它仅由一个内核提供服务,这并非疯狂。

WinForm应用程序(以及从WPF派生而来的东西)专门处理一个主UI线程上的UI,如果它们试图与其他线程上的UI混为一谈,则会出现竞态条件,该条件通常导致随机锁定并冻结,但今天只抛出异常(这更好)。您可以在WinForm应用程序中使用多线程(看起来并非如此),但不能触摸这些线程上的可视组件。所有视觉组件事件(单击,鼠标悬停等)都将在UI线程上处理。

控制台应用程序可能会让您阅读更清晰。最好是找到其他人制造的工具,因为在衡量性能方面存在很多陷阱,您可能会对此感到犯规。

供参考:得出这样的结论:在这样的测试基础上出了点问题是不好的(例如,在VMWare,服务器或Windows中),如果您是同事,我会少想你。在这样大胆的断言中要更加谨慎,并认为问题出在测试 first most 上。尝试衡量性能时,这始终是最好的心态。
在经历了大约一个星期或几个月的麻烦之后,您可能会开始质疑具有巨大用户群,高度复杂的发布流程和质量检查功能的软件产品。