2

我需要在应用程序中实现撤消重做功能,该应用程序读取项目文件并进行一系列单独的事务来更改项目的内容。该项目可能有数百 MB 大。

我的想法是在写时复制(PAGE_WRITECOPY)内存机制的基础上实现undo-redo。我假设在事务结束后,应用程序可以访问已更改和未更改的页面,比较它们,识别更改的记录,将原始记录状态存储在专用的撤消堆栈中,释放创建的未更改页面并恢复写入- 更改页面的复制保护。我有两个问题:

  1. 我如何以及在哪里可以找到原始(未更改)页面的地址。

  2. 这种实现的期待性能?项目记录的中间大小是 cira 100 字节。如果一个事务更改了 3000 条记录,这可能涉及更改 100 个或更多 4K 物理页面。复制时写入内存的性能是否足以支持每一步中数百个物理页面的例行更改?

4

0 回答 0