0

我不想过多详细介绍功能,但是当向其中添加或删除子控件时,我们的应用程序窗口会调整大小。在最近执行的压力测试中,我们注意到 Windows 任务管理器中的应用程序工作集高峰期。每 200 毫秒添加和删除子控件,因此窗口每隔一段时间就会变大或变小。我们在 VMware Workstation Pro 虚拟机(Windows Server 2012、Windows 10)上执行了这些测试。

最多几个小时后,应用程序总是会报告内存不足异常,并且所说的窗口会冻结或消失。我们注意到崩溃后工作集正常(低于 100 MB),但峰值工作集始终超过 1 GB(~1.1 到 ~1.6 GB)。

为了找出问题是否是由我们的应用程序中的错误引起的,我们决定创建一个单窗口 WPF 应用程序,其中只有一个计时器,该计时器每 200 毫秒更改一次主窗口的高度。原来这个应用程序也有同样的问题。

问题是我找不到有关类似问题的信息,所以我决定在这里发布一个问题。你会如何解释这种行为?

我还要注意:

  1. 当窗口最小化时,问题就不会发生。
  2. 很难在主机(不是虚拟机)上重现该问题,但我们碰巧在那里也观察到了它(在 Windows 8 上)。

我们还在虚拟计算机 (WMware ESX 5.5) 上进行了测试。当没人看时,崩溃会发生得更快:-)。我的意思是我们从 vSphere Client 连接到虚拟机并打开控制台以在操作系统上启动我们的测试应用程序。然后我们切换到 vSphere Client 的另一个选项卡以隐藏控制台。当我们稍后(假设在半小时后)返回时,我们可以观察到我们的测试应用程序的内存使用历史,它具有缓慢上升的斜率,并在显示控制台的那一刻立即下降。

我将不胜感激任何可以帮助我理解此问题原因的信息。谢谢你。

- 编辑 -

我在 VM (Windows Server 2012) 上的两个实例中启动了我的测试应用程序 - 都为任何 CPU 编译,但其中一个在 Visual Studio 中未选中Prefer 32-bit复选框。所以一个以 32 位模式启动,另一个以 64 位模式启动。32 位版本在一个小时左右就崩溃了,峰值工作集低于 150 MB。64 位版本继续运行。我想知道这是否可能是要走的路...

以下是 32 位应用程序版本的问题签名:

Problem signature:
  Problem Event Name:   CLR20r3
  Problem Signature 01: ResizeStressTest 32.exe
  Problem Signature 02: 1.0.0.0
  Problem Signature 03: 5762641e
  Problem Signature 04: PresentationCore
  Problem Signature 05: 4.0.30319.34209
  Problem Signature 06: 5348b56b
  Problem Signature 07: 283
  Problem Signature 08: 13
  Problem Signature 09: System.OutOfMemoryException
  OS Version:   6.2.9200.2.0.0.272.7
  Locale ID:    1031
  Additional Information 1: 5861
  Additional Information 2: 5861822e1919d7c014bbb064c64908b2
  Additional Information 3: 5c1f
  Additional Information 4: 5c1f554df00553b422a8baa03b19335a

Read our privacy statement online:
  http://go.microsoft.com/fwlink/?linkid=190175

If the online privacy statement is not available, please read our privacy statement offline:
  C:\Windows\system32\en-US\erofflps.txt
4

1 回答 1

0

当我必须像您描述的那样追踪内存泄漏时,我总是求助于WinDBG

它是免费的,而且非常有效。虽然它有一个非常陡峭的学习曲线。它会告诉你有多少对象实例在内存中,并引导你了解它们的引用是什么

于 2016-06-20T16:44:43.927 回答