アプリケーションに元に戻す/やり直し機能を実装する必要があります。この機能は、プロジェクト ファイルを読み取り、プロジェクトのコンテンツを変更する一連の個別のトランザクションを作成します。プロジェクトのサイズは数百 MB になる場合があります。
私の考えは、コピー オン ライト (PAGE_WRITECOPY) メモリ メカニズムに基づいて、取り消しとやり直しを実装することです。トランザクションの終了後、アプリケーションは変更されたページと変更されていないページの両方にアクセスし、それらを比較し、変更されたレコードを識別し、元のレコードの状態を専用の取り消しスタックに保存し、作成された変更されていないページを解放し、書き込みを復元できると想定しています。 -変更されたページのコピー保護。2 つの質問があります。
元の (変更されていない) ページのアドレスを見つける方法と場所。
そのような実装の待望のパフォーマンス?. プロジェクトのレコードの中間サイズは cira 100 バイトです。トランザクションが 100 以上の 4K 物理ページの変更を伴う可能性がある 3000 レコードを変更した場合。ライト オン コピー メモリは、各ステップでの数百の物理ページの定期的な変更をサポートするのに十分なパフォーマンスを備えていますか?