好像三種方式接近檢測文字/圖像/數據文件未保存的更改可能是:未保存的更改檢測的實施
更新一個布爾標誌每個用戶進行了更改或節省時間,這會導致很多不必要的更新。
保留原始文件的緩存副本和diff的每一個需要被檢查保存操作時兩個。
保持過去所有操作的堆棧和推/彈出操作需要,造成了很多額外的內存使用情況。
一般來說,商業應用程序如何檢測未保存的更改是否存在以及每種方法的優缺點是什麼?在編寫具有特殊保存行爲的自定義應用程序時,我遇到了這個問題,並想知道是否有已知的最佳做法。
好像三種方式接近檢測文字/圖像/數據文件未保存的更改可能是:未保存的更改檢測的實施
更新一個布爾標誌每個用戶進行了更改或節省時間,這會導致很多不必要的更新。
保留原始文件的緩存副本和diff的每一個需要被檢查保存操作時兩個。
保持過去所有操作的堆棧和推/彈出操作需要,造成了很多額外的內存使用情況。
一般來說,商業應用程序如何檢測未保存的更改是否存在以及每種方法的優缺點是什麼?在編寫具有特殊保存行爲的自定義應用程序時,我遇到了這個問題,並想知道是否有已知的最佳做法。
只要你需要一個撤銷/重做系統,需要過去的操作該堆棧。爲了檢測文件的狀態,堆棧的一個項目被設置爲'保存狀態'。當前的堆棧節點不是該項目,文檔已更改。
你可以看到這個在Qt的QUndoStack(http://doc.qt.nokia.com/stable/qundostack.html)爲例,其isClean()
和setClean()
對於命題1,更新布爾是不是有問題,並採取很少的時間。
這取決於你想要的功能和文件的大小/格式,我猜。
第一個選項是最簡單的,和它給你你想要minial開銷什麼。
第二個方案的優點是可以檢測到的變化已手動恢復時,以便有畢竟沒有真正的變化(儘管這可能不會發生太頻繁)。另一方面,僅僅爲了檢查是否有任何修改而進行差異化成本要高得多。每當用戶按下某個鍵時,您可能不希望這樣做。
第三個選項提供了提供撤消歷史記錄的功能。您可以通過將連續進行的更改組合在一起(無需在兩者之間移動光標)或類似方法來限制該歷史記錄中的項目數。
「不必要的更新」?當你在整個圖像上應用了一個過濾器時,寫一個微不足道的布爾值是否真的值得關注?即使在Word文檔中插入單個字符也會在內部做很多非顯而易見的事情。相比之下,我懷疑寫出一面旗幟是相關的。 –