我需要在应用程序中实现undo-redo功能,该功能读取项目文件并生成一系列单独的事务来更改项目的内容。该项目可以是几百MB大。
我的想法是在写时复制(PAGE_WRITECOPY)内存机制的基础上实现undo-redo。我假设在事务结束后,应用程序可以访问已更改和未更改的页面,比较它们,识别更改的记录,将原始记录状态存储在专用的撤消堆栈中,释放创建的未更改页面并恢复写入-copy保护已更改的页面。我有两个问题:
我如何以及在何处找到原始(未更改)网页的地址。
等待这种实施的表现?项目记录的中间大小是cira 100字节。如果事务更改了3000条记录,可能涉及更改100个或更多4K物理页面。复制写入内存的性能是否足以支持每一步上数百个物理页面的常规更改?