System.Windows.Forms.TrackBar内存使用具有较大的最大值

Gre*_*bon 3 .net c# memory max trackbar

我有一个包含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
Run Code Online (Sandbox Code Playgroud)

这是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

Han*_*ant 5

这是Windows控件中的错误吗?

是的,我想你可以称之为一个bug.特别是在64位操作系统上讨厌,平台目标设置为AnyCPU,因此内存分配没有合理的上限.我的机器完全死于用鼠标交换死机而Ctrl + Alt + Del没有响应,我硬启动它以取回它.谢谢.

实际上有两个错误.它从本机轨迹栏控件开始,没有对刻度数设置合理的上限.通过以正确的顺序分配属性,您可以在设计模式中幸存下来.但是TrackBar类包装器中的缺陷更加复杂,它在TickFrequency属性之前在运行时初始化本机控件时分配Maximum属性.因此,在短暂的一刻,它仍然有很多蜱虫.嗯,当它是20亿,就像我在不知不觉中尝试的那样,它并不简短.

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