当复选框控件的Visible变为true时,comctl32.dll占用的内存过多

时间:2013-03-04 16:49:44

标签: c# .net memory comctl32

我在运行时在C#.NET应用程序中向Windows窗体添加控件。这些控件中的每一个都与特定信号交互并使用来自该信号的一些数据 - 信号名称,描述,来源,单位,值等。

这些控件上有一个复选框。当其中一个信号的复选框的Visible属性变为true时,我的应用程序的Committed内存跳跃超过800MB。其他数百个信号都没有问题。

我使用DebugDiag工具了解comctl32.dll正在分配805.45 MBytes。特别是:

  • 功能comctl32_72380000!CCHeapAllocArraySize + 3a
  • 分配类型堆分配
  • 堆句柄0xf37893cd
  • 分配计数1分配
  • 分配大小803.20 MBytes
  • 泄漏概率16%

下一步的故障排除步骤应该是什么?哪些工具可以提供帮助?

更新 我将问题跟踪到父控件上的System.Windows.Forms.TrackBar。轨道栏最多超过200,000,000。当我将最大值降低到100,000,000时,它占用了大约一半的内存。将最大值设置为1,000,000可以使用更合理的内存量。

1 个答案:

答案 0 :(得分:0)

我将问题跟踪到父控件上的System.Windows.Forms.TrackBar。轨道栏最多超过200,000,000。当我将最大值降低到100,000,000时,它占用了大约一半的内存。将最大值设置为1,000,000可以使用更合理的内存量。

复选框.Visible把我扔了。似乎应用程序在checkbox.Visible变为true时创建了控件和内存,但复选框本身与问题无关。