我有一个 ac# 应用程序,其中用户通过使用拖放操作使用 wpf 树视图来做一些业务。Undo 堆栈提供了一些用户功能,可以从一开始就回滚所有内容,并且大约限制为大约 500 步。
因此,如果这些对象引用在 undostack 内,则不允许 GC 完成它们,因为用户可能希望它回来。
现在使用复制和粘贴,软件测试人员可以这样做并在彼此内部复制 2 个节点,重复此操作例如 20 次,这意味着对象数从 2、4、8、16、32 克隆到最终 1048576 . 因此,复制操作可能会导致创建例如 1048576 个更多对象,因此 Undo 堆栈将存储 1048576 个对象引用,用于 ONE Undo 步骤。测试人员可以轻松创建此应用程序崩溃:
引发了“System.OutOfMemoryException”类型的异常。
所以限制Undo堆栈并不能解决对象过多的问题。
除了没有这么多对象的用例之外,我想只是为了安全起见。
msdn 告诉我:
确保您有足够的内存用于内部用途和新的托管对象。
在我的情况下,我怎样才能实现这一点,保持撤消功能?