Этот вопрос связан с этим, но я думаю, что его следует задавать отдельно.
У меня есть сложный граф экземпляров объектов. Теперь я хотел бы создать контрольную сумму на этом объектном графе непосредственно в памяти, чтобы определить, были ли внесены изменения с момента последнего сохранения контрольной суммы с помощью графа объектов. Расчет контрольной суммы должен быть быстрым и не должен потреблять слишком много памяти.
Как я понимаю, лучшим решением, вероятно, было бы создание криптографического ключа в двоичной сериализованной форме графа объектов (исправьте меня, если я ошибаюсь). Но это связано с несколькими вопросами:
- Как я должен сериализовать объект? Он должен быть быстрым, а не потребляют слишком много памяти. Также это должен быть надежно всегда сериализован так же. Если я использую сериализацию по умолчанию .NET, могу ли я быть уверен, что созданный двоичный поток всегда одинаковый, если фактические данные одинаковы? Я сомневаюсь в этом.
- Итак, каким будет альтернативный способ сериализации, который не займет много времени?
Update:
Что вы думаете об этом подходе:
- перемещаться по графику и объект foreach в графе создает стандартный хэш-код с использованием этот алгоритм (но исключаем элементы ссылочного типа, представляющие узлы в графе). Добавить каждый hashcode в целочисленный список
- преобразовать целочисленный список в байт Массив
- создать хэш в массиве байтов используя MD5, CRC или аналогичный
Описанный алгоритм GetHashCode должен быстро вычислить хэш-код, который является довольно безопасным для одного объекта, который учитывает только его примитивные элементы. Основываясь на этом, массив байтов должен также быть довольно безопасным для столкновений представлением графа объектов и хешей MD5/CRC.