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を超えるメモリを使用します。.NETFramework4を使用しています。

トラックバーの最大値を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が応答しなくなったので、ハードブートして元に戻しました。ありがとう。

実際には2つのバグ。それは、ネイティブのトラックバーコントロールがティック数に妥当な上限を設定していないことから始まります。プロパティを正しい順序で割り当てることにより、デザインモードでそれを乗り切ることができます。ただし、TrackBarクラスラッパーの欠陥によって複雑になり、実行時にネイティブコントロールを初期化するときに、TickFrequencyプロパティの前にMaximumプロパティが割り当てられます。ですから、しばらくの間、それはまだ何億ものダニを持っています。さて、私が無意識のうちに試したように、それが20億であるとき、それは簡単ではありません。

これに対する簡単な修正はなく、このバグは修正されません。妥当な値を使用してください。乗算によっていつでもマップできます。

于 2013-03-05T02:16:56.300 に答える