多个应用实例,Windows GDI限制

时间:2011-02-13 19:38:46

标签: c# gdi

我试图同时运行同一个应用程序的数百个实例(使用C#),在大约200个实例之后,GUI开始急剧减速,直到下一个实例的加载时间爬升到20秒为止(从1S)。

测试机器是: 至强5520 12gb ram windows 2008 web 64位

在最大负载(200个实例)时,cpu约为20%,ram为45%,所以我确定它不是硬件问题。

我已经尝试在Windows的注册表中配置会话大小和SharedSection,但它似乎没有帮助。

我还尝试在后台运行应用程序,也尝试在多个会话(不同的会话)上运行应用程序,但仍然相同(我可能会限制每个会话)。

当例如在一个会话中发生减速时,我可以登录到另一个会话并且桌面工作没有问题(第一个dekstop无法使用。)

我的问题是 - 有没有办法剥离gdi对象或者可以省去GUI的使用?还是窗户限制?

p.s - 我不能改变应用程序,因为它是第三个pary。

提前致谢。

2 个答案:

答案 0 :(得分:0)

运行200个实例时,常量上下文切换可能会影响性能。 CPU负载中不计入上下文切换。

编辑:哎呀,错误的链接。

尝试监控系统上下文切换 http://technet.microsoft.com/en-us/library/cc938606.aspx

答案 1 :(得分:0)

我怀疑它是GDI - 如果你的GDI句柄/资源耗尽,你会注意到大量的窗口无法重绘,而不是每一个都放慢速度。

性能突然下降的最可能原因是,当您的所有进程争用CPU时间时,您正在最大化RAM并摧毁虚拟内存。检查内存使用情况,如果内存使用率很高,请查看是否可以减少应用程序的占用空间。或者通过安装更多RAM来应用“硬件修复”。或者尽可能将Sleep添加到您的应用程序中,这样他们就不会要求CPU保持不变的时间片(因此需要不断地从VM中分页)。