我在 C# .NET 应用程序的运行时向 Windows 窗体添加控件。这些控件中的每一个都与特定信号交互并使用来自该信号的一些数据——信号名称、描述、来源、单位、值等。
这些控件上有一个复选框。当这些信号之一的复选框的 Visible 属性变为真时,我的应用程序的 Committed 内存就会跃过 800MB。其他数百个信号都没有问题。
我使用 DebugDiag 工具了解到 comctl32.dll 正在分配 805.45 MBytes。特别是:
- 函数 comctl32_72380000!CCHeapAllocArraySize+3a
- 分配类型堆分配
- 堆句柄0xf37893cd
- 分配计数 1 个分配
- 分配大小 803.20 MB
- 泄漏概率 16%
接下来的故障排除步骤应该是什么?哪些工具可以提供帮助?
更新: 我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹栏最高超过两亿。当我将最大值减少到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右会使用更合理的内存量。
最佳答案
我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹栏最高超过两亿。当我将最大值减少到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右会使用更合理的内存量。
checkbox.Visible 让我失望了。看起来应用程序正在为复选框创建控件和内存。Visible 变为 true,但复选框本身与问题无关。
关于c# - 当复选框控件的 Visible 变为 true 时,comctl32.dll 使用过多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15206654/