see also Hows to quick check if data transfer two objects have equal properties in C#?
I have lot of Data Transfer Objects (DTO) tha
You can have a concept of an object hash - whenever an object changes, you pay the price of updating the hash (where the hash is literally a hash of all concatenated properties). Then, if you have a bunch of objects that rarely change, it's really cheap to compare them. The price, of course, is then paid at object editing time.