应用程序性能异常下降

5
我们有一个应用程序,它混合了.NET 2.0和本地C++。在我们的测试中,我们有一种模式可以自动循环运行一组项目。一个项目打开、运行、关闭、重复。每个步骤都需要创建/销毁窗口(确切地说是winforms)。最近我们遇到了一些奇怪的性能问题。在运行几个小时后,打开和关闭部分变慢了(阻塞GUI线程并显示半个绘制屏幕等)。现在很容易认为这是资源泄漏的问题……但我们正在跟踪句柄和内存,虽然内存略微增长,但没有任何迹象表明出现了这种级别的问题。句柄是稳定的。所以可能是悬空的事件处理程序……还需要调查一下。但是让我困惑的是,关闭应用程序并重新启动它并不能恢复最初的性能。直到我重新启动操作系统(Win XP),性能才开始变得敏捷。这真的让我困惑,因为我认为关闭应用程序会回收所有资源。您有什么想法吗?

在减速之前和之后,您应该在分析器下运行应用程序,并比较两个结果。任何明显不同的地方都值得调查。有很多免费、好用或免费又好用的分析器可供选择,只需尝试几个并选择一个您感到舒适的即可。 - Rom
3个回答

1

我赞同使用内存分析器。它可以让你拍摄快照并进行比较 - 这样你就可以在一个迭代上拍摄快照,在下一个迭代上再拍摄另一个快照,并对它们进行差异比较 - 你可以看到应用程序在常见迭代之间增长了什么。 - stusmith
我有.NET内存分析器并将尝试使用它 - 但是,重新启动应用程序(无需重新启动计算机)无法解决问题的事实不会被进程增长中的任何内容所解释。 - user109078
GDI 句柄在应用程序关闭时由操作系统回收。原帖作者(不知如何称呼他/她)需要验证当他们认为应用程序已关闭时,它确实已经关闭。或许有其他进程在系统中与应用程序一起工作(或服务,或自定义驱动程序),也许在应用程序退出后它们仍然存在。 - Rom

0

我们正在泄漏窗口类


0

你假设这是一个资源泄漏(这不是一个坏猜测),但它可能是其他问题。

你尝试过使用性能分析器吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接