我在 C# .NET 应用程序的运行时向 Windows 窗体添加控件。这些控件中的每一个都与特定信号交互并使用来自该信号的一些数据——信号名称、描述、来源、单位、值等。
这些控件上有一个复选框。当其中一个信号的复选框的 Visible 属性变为 true 时,我的应用程序的已提交内存将超过 800MB。其他数百个信号都没有问题。
我使用 DebugDiag 工具得知 comctl32.dll 正在分配 805.45 MBytes。尤其:
- 函数 comctl32_72380000!CCHeapAllocArraySize+3a
- 分配类型 堆分配
- 堆句柄 0xf37893cd
- 分配计数 1 个分配
- 分配大小 803.20 MB
- 泄漏概率 16%
我的下一个故障排除步骤应该是什么?哪些工具可以提供帮助?
更新: 我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹栏的最大值超过 200,000,000。当我将最大值降低到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右会使用更合理的内存量。