2011-10-16 75 views
3

我在應用程序啓動時從數據庫反序列化對象,然後在應用程序生命週期中用戶可以更新對象,並在結束時將對象序列化回數據庫作爲xml字符串。除了比較初始和最終字符串之外,是否有任何方法可以找出該對象是否已更新。查找對象的快速方法已更新

我知道可以使用:

  1. String.GetHashCode方法,但指出,「不同的字符串可以返回相同的散列碼」。

  2. MD5哈希,如在How to compute and compare hash values by using Visual C#中所做的那樣。雖然我不知道不同的字符串是否可以返回相同的MD5散列。

我知道我的xml總是小於100KB。

+5

沒有散列碼永遠不會是唯一的,除非它比所有的輸入字符串都長。 – SLaks

+0

如果你要使用散列碼路由,你可以做一些類似於.Net框架的工具來加速相等比較:檢查對象的GetHashCode結果。如果它們相同,請檢查「Equals」。如果他們仍然是平等的,那麼考慮他們不變。這很容易實現,儘管不是最快的。當你完成這個,配置文件,看看你是否真的需要更快的方法。序列化和線路傳輸可能比相等比較慢得多,所以你可能試圖優化一些不是你的瓶頸的東西。 –

+0

如果事實證明您需要更快的方法,您可以查看Sam建議的答案(手動更改跟蹤)。此外,.Net Entity Framework內置了這種類型的更改跟蹤。您可以考慮使用它,而不是您的自定義數據訪問代碼。 –

回答

2

執行IPropertyChanged,並跟蹤對象是否髒污。

+1

或者至少有一個私有財產,其他財產製定者可以在對象更新時進行調整。這使您可以靈活地決定在應用程序中是否更新不會更改屬性的值。 – HABO

+0

我想沒有其他答案 – walter