Создание контрольной суммы на графе объекта

Этот вопрос связан с этим , но я думаю, что его следует задать отдельно.

У меня сложный граф. экземпляров объекта. Теперь я хотел бы создать контрольную сумму для этого графа объекта непосредственно в памяти, чтобы определить, были ли внесены в него изменения с момента последнего сохранения контрольной суммы с графом объекта. Расчет контрольной суммы должен быть быстрым и не должен занимать слишком много памяти.

Насколько я понимаю, лучшим решением, вероятно, было бы создание криптографического ключа в двоичной сериализованной форме графа объектов (поправьте меня, если я ошибаюсь). Но тут возникает несколько вопросов:

  1. Как мне сериализовать объект? Это должно быть быстро, а не

    Насколько я понимаю, лучшим решением, вероятно, было бы создание криптографического ключа в двоичной сериализованной форме графа объектов (поправьте меня, если я ошибаюсь). Но тут возникает несколько вопросов:

    1. Как мне сериализовать объект? Это должно быть быстро, а не

      Насколько я понимаю, лучшим решением, вероятно, было бы создание криптографического ключа в двоичной сериализованной форме графа объектов (поправьте меня, если я ошибаюсь). Но тут возникает несколько вопросов:

      1. Как мне сериализовать объект? Это должно быть быстро, а не потребляют слишком много памяти. Также это всегда должен быть надежно сериализован так же. Если я использую сериализацию по умолчанию .NET, могу ли я действительно быть уверен, что созданный двоичный поток всегда будет таким же, если фактические данные такие же? Я сомневаюсь в этом.
      2. Итак, каким был бы альтернативный способ сериализации, реализация которого не займет много времени?

      Обновление:

      Что вы думаете об этом подходе:

      1. перемещайтесь по графику и объект foreach на графике создает стандартный хэш-код int с использованием это алгоритм (но исключить элементы ссылочного типа, представляющие узлы в графе). Добавьте каждый хэш-код в целочисленный список
      2. преобразовать целочисленный список в байт array
      3. создать хеш для байтового массива с использованием MD5, CRC или аналогичных

      Упомянутый алгоритм GetHashCode должен быстро вычислить хэш-код, который достаточно безопасен для коллизий для одного объекта, который учитывает только его примитивные члены. Исходя из этого, байтовый массив также должен быть довольно безопасным для коллизий представлением графа объекта и хэша MD5 / CRC для этого.

14
задан Community 23 May 2017 в 12:23
поделиться