ユーザーがドラッグ&ドロップを使用してwpfツリービューを操作することでビジネスを行うac#アプリがあります。元に戻すスタックは、最初からすべてをロールバックするためのいくつかのユーザー機能を提供し、約 500 ステップまでに制限されています。
そのため、これらのオブジェクト参照が undostack 内にある場合、GC はそれらをファイナライズできません。
コピー アンド ペーストを使用して、ソフトウェア テスターはこの方法で 2 つのノードを相互にコピーし、これをたとえば 20 回繰り返します。 . そのため、コピー操作によってさらに 1048576 個のオブジェクトが作成される可能性があるため、元に戻すスタックには、1 回の元に戻すステップで 1048576 個のオブジェクト参照が格納されます。テスターは、このアプリのクラッシュを簡単に作成できます。
タイプ 'System.OutOfMemoryException' の例外がスローされました。
そのため、元に戻すスタックを制限しても、オブジェクトが多すぎるという問題は解決されません。
それに加えて、これほど多くのオブジェクトを使用するユース ケースはありません。
msdn は私に伝えます:
内部目的と新しい管理オブジェクト用に十分なメモリがあることを確認してください。
私の場合、元に戻す機能を維持しながらこれを達成するにはどうすればよいですか?