Можно ли получить эквивалент «адреса памяти» объекта .net?

Мы внедряем специальный инструмент сериализации в наш проект и сталкиваемся с необходимостью однозначно идентифицировать каждый объект по примитивному типу значения, который может использоваться как синоним его «идентичности». Значение не обязательно должно иметь значение или организацию, просто оно уникально и сохраняется, по крайней мере, на время выполнения процедуры сериализации. В идеале .net должен был бы поддерживать внутри себя уникальный и постоянный идентификатор объекта, который мы могли бы сохранить как идентификатор объекта. Я знаю, что у каждого объекта есть метод GetHashCode, но мы не уверены в глобальной уникальности значения. Еще одним критерием доступа к такому идентификатору является то, что метод должен быть очень эффективным.

Я посмотрел на GetHashCode, сборщик мусора и сортировку идей, но еще не пришел к чему-нибудь надежному.


person J Collins    schedule 15.10.2012    source источник


Ответы (1)


Вы ищете ObjectIDGenerator class, который делает именно то, что вы пытаетесь сделать.

person SLaks    schedule 15.10.2012
comment
Это на основе объектного ›целочисленного словаря? - person J Collins; 15.10.2012
comment
На самом деле, похоже, что он основан на Hashtable, означает ли это, что метод GetHashCode объекта принципиально отвечает за уникальность идентификатора? - person J Collins; 15.10.2012
comment
Дальнейшие исследования, согласно stackoverflow.com/questions/7789430/, ObjectIDGenerator использует RuntimeHelpers.GetHashCode(Object) метод, который msdn.microsoft.com/en- us / library / использует HashTable, а затем msdn.microsoft.com/en-us/library/ использует метод Object.GetHashCode, который сам stackoverflow.com/questions/7458139/ не обязательно уникален. - person J Collins; 16.10.2012