2009-10-28 79 views
5

我们有一个混合了.NET 2.0和本机C++的应用程序。在我们的测试中,我们有一种可以自动循环一系列项目的模式。一个项目打开,运行,关闭,重复。这些步骤中的每一步都需要创建/销毁窗口(准确地说,winforms)。最近我们遇到了一些奇怪的表现。运行几个小时后,开启和关闭部分减速(阻止GUI线和显示半画面等)。现在可以很容易地将这个问题解决为资源泄漏......但是我们正在跟踪句柄和内存,而内存略微增长,没有什么可以指示这个级别的问题。手柄是稳定的。所以也许悬挂事件处理程序......仍然需要调查。但令我困惑的是,关闭应用程序并重新启动应用程序并不能恢复最初的性能。在重新启动操作系统(赢得XP)之前它仍然很慢,然后性能再次开始活跃。这让我感到困惑,因为我认为关闭应用程序将回收所有资源。有什么想法吗?应用程序性能下降

+0

您应该在减速前后的分析器中运行应用程序,并比较两个结果。所有突出显着不同的东西都值得调查。有很多免费的,或者很好的,或者免费的,很好的配置文件,只需要尝试几个,然后选择一个您感觉舒适的配置。 – Rom 2009-10-29 08:13:42

回答

1

听起来像是可能的GDI句柄泄漏。垃圾收集器不会自动拾取GDI objects

.NET Memory Profiler(http://memprofiler.com/)在跟踪这些(有14天的试用版)方面做得很好。

你有没有见过这种情况:

+0

我将第二次使用Memory Profiler。它可以让你拍摄快照并对它们进行比较 - 这样你就可以在一次迭代中拍摄快照,在下一张照片上拍摄另一张照片,并对它们进行区分 - 你可以准确地看到在你的应用程序的常见迭代之间增长的东西。 – stusmith 2009-10-28 15:24:43

+0

我有.NET内存分析器,并会尝试 - 但重新启动应用程序(无需重新启动)不能解决问题的事实不会解释任何过程增长。 – user109078 2009-10-28 16:17:40

+0

对于某些有限的系统资源,例如GDI句柄,这不是真的。 – 2009-10-29 00:44:12

0

你假设它的资源泄漏(这不是一个错误的猜测),但它可能是别的。

您是否尝试过使用性能分析器?