Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用中的奇数性能下降 我们有一个混合.NET 2和本地C++的应用程序。在我们的测试中,我们有一个模式可以自动循环一组项目。项目打开、运行、关闭、重复。每个步骤都需要创建/销毁窗口(确切地说是winforms)。最近我们在表演中遇到了一些奇怪的行为。运行几个小时后,打开和关闭部件的速度会减慢(阻塞gui线程并显示半绘制的屏幕等)。现在很容易将其阻塞为资源泄漏…但我们正在跟踪句柄和内存,虽然内存略有增长,但没有任何迹象表明出现了这种级别的问题。手柄稳定。因此,可能悬空事件处理程序…仍然需要对此进行调查。但让我困惑的关键是,关闭应用程序并重新启动它并不能恢复最初的性能。它仍然很慢,直到我重新启动操作系统(WinXP),然后性能又开始快速提升。这确实让我感到困惑,因为我认为关闭应用程序将回收所有资源。有什么想法吗?_.net_Performance - Fatal编程技术网

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

应用中的奇数性能下降 我们有一个混合.NET 2和本地C++的应用程序。在我们的测试中,我们有一个模式可以自动循环一组项目。项目打开、运行、关闭、重复。每个步骤都需要创建/销毁窗口(确切地说是winforms)。最近我们在表演中遇到了一些奇怪的行为。运行几个小时后,打开和关闭部件的速度会减慢(阻塞gui线程并显示半绘制的屏幕等)。现在很容易将其阻塞为资源泄漏…但我们正在跟踪句柄和内存,虽然内存略有增长,但没有任何迹象表明出现了这种级别的问题。手柄稳定。因此,可能悬空事件处理程序…仍然需要对此进行调查。但让我困惑的关键是,关闭应用程序并重新启动它并不能恢复最初的性能。它仍然很慢,直到我重新启动操作系统(WinXP),然后性能又开始快速提升。这确实让我感到困惑,因为我认为关闭应用程序将回收所有资源。有什么想法吗?,.net,performance,.net,Performance,听起来可能是GDI句柄泄漏。垃圾收集器不会自动拾取 .NET内存探查器()在跟踪这些方面做得很好(有一个14天的试用版) 你见过这些吗 (具有指向GDI句柄查看器工具的链接) 您假设这是一个资源泄漏(这不是一个坏猜测),但可能是其他原因 你试过使用性能分析器吗?我们泄漏了窗口类我支持使用内存分析器。它可以让你拍摄快照并进行比较——这样你就可以在一次迭代中拍摄快照,在下一次迭代中拍摄另一个快照,并对它们进行区分——你可以准确地看到应用程序的常见迭代之间的增长情况。我有.NET Memory P

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

.NET内存探查器()在跟踪这些方面做得很好(有一个14天的试用版)

你见过这些吗

  • (具有指向GDI句柄查看器工具的链接)


您假设这是一个资源泄漏(这不是一个坏猜测),但可能是其他原因


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

我们泄漏了窗口类

我支持使用内存分析器。它可以让你拍摄快照并进行比较——这样你就可以在一次迭代中拍摄快照,在下一次迭代中拍摄另一个快照,并对它们进行区分——你可以准确地看到应用程序的常见迭代之间的增长情况。我有.NET Memory Profiler,并将尝试使用它——但事实是重新启动应用程序(无需重新启动)无法修复此问题不会由进程增长中的任何内容来解释。当应用程序关闭时,操作系统将收集GDI句柄。原始海报(不知道如何称呼他/她,但不知道姓名)需要验证,当他们认为应用程序已关闭时,该应用程序确实已关闭。可能系统中还有其他进程与应用程序一起工作(或服务,或自定义驱动程序),也可能在应用程序运行完毕后仍然存在。您应该在减速前后在探查器下运行应用程序,并比较两个结果。任何明显不同的东西都值得调查。有很多免费的,或好的,或免费的和好的剖析器,只要尝试一些,并选择一个你感到舒服。