3

我有一个包含 System.Windows.Forms.TrackBar 的控件。我将其最大值设置为~200,000,000。当我这样做时,控件需要 800MB 内存。将最大值减少到 2,000,000 使用了更合理的内存量。

//trackBar.Maximum = 210554060;  // uses ~800MB of memory
trackBar.Maximum = 1000000;      // uses a small amount of memory

这是 Windows 控件中的错误吗?还是我要求轨迹栏做一些不合理的事情?

更新: 我创建了一个新的 Windows 窗体项目,窗体上只有一个轨迹栏。我将最大值设置为 200,000,000。我设置了 TickFrequency 和更改,以便没有数百万个刻度和更改步骤。

当我这样做时,应用程序使用了超过 800MB 的内存。我正在使用 .NET Framework 4。

trackbar max 设置为 200,000,000,使用 > 800MB 内存.

更新 我发现了这个问题的一些解释:http ://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms.controls/2006-12/msg00015.html

添加链接到测试项目 https://www.dropbox.com/s/nh6jsymw05feoqn/testingTrackbar.zip?m

4

1 回答 1

5

这是 Windows 控件中的错误吗?

是的,我认为您可以称其为错误。在平台目标设置为 AnyCPU 的 64 位操作系统上尤其令人讨厌,因此内存分配没有合理的上限。我的机器完全死于鼠标和 Ctrl+Alt+Del 无响应的交换死亡,我硬启动它以使其恢复。谢谢。

实际上有两个错误。它从本机轨迹栏控件开始,没有对刻度数设置合理的上限。通过以正确的顺序分配属性,您可以在设计模式下幸存下来。但是由于 TrackBar 类包装器中的一个缺陷,它在运行时初始化本机控件时在 TickFrequency 属性之前分配了 Maximum 属性。所以在很短的时间内它仍然有无数的滴答声。好吧,当它有 20 亿个时,这并不简短,就像我无意中尝试的那样。

没有简单的解决方法,这个错误也不会得到修复。使用合理的值,您始终可以通过乘法映射它们。

于 2013-03-05T02:16:56.300 回答