2011-10-16 42 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