Мне нужно назначить guid объектам для управления состоянием при запуске и завершении работы приложения. Похоже, я могу хранить значения поиска в словаре, используя
dictionary<int,Guid>.Add(instance.GetHashCode(), myGUID());
Есть ли какие-либо потенциальные проблемы, о которых нужно знать?
ПРИМЕЧАНИЕ
Это НЕ должно сохраняться между запусками выполнения, только такой guid
- создать объект
- gethashcode(), связать с новым или старым guid
перед завершением работы приложения gethashcode() и руководство по поиску для update() или insert() в механизм сохраняемости, ИСПОЛЬЗУЯ GUID
единственное предположение состоит в том, что gethashcode() остается согласованным во время работы процесса
также gethashcode() вызывается для того же типа объекта (производного от окна)
Обновление 2 - вот большая картина
- создать конечный автомат для хранения информации о пользовательских элементах управления WPF (позже именуемых UC) между запусками
- типы пользовательских элементов управления могут меняться со временем (добавляться/удаляться)
- в самом первом запуске нет предыдущего состояния, пользователь взаимодействует с подмножеством UC и изменяет свое состояние, которое необходимо воссоздать при перезапуске приложения.
- этот моментальный снимок состояния делается, когда приложение нормально завершает работу
- также может быть несколько экземпляров типа UC
- при завершении работы каждому экземпляру назначается идентификатор и сохраняется вместе с информацией о типе и состоянии.
- все эти гиды также хранятся в коллекции
- при перезапуске для каждого guid создайте объект, сохраните ref/guid, восстановите состояние для каждого экземпляра, чтобы приложение выглядело точно так же, как и раньше
- пользователь может добавлять или удалять экземпляры/типы UC и иным образом взаимодействовать с системой
- при выключении состояние снова сохраняется
- выбор в это время состоит в том, чтобы удалить/удалить все предыдущее состояние и вставить информацию о новом состоянии в слой сохраняемости (sql db)
- при наблюдении/анализе с течением времени выясняется, что многие экземпляры остаются согласованными/статическими и не меняются, поэтому их состояние не нужно удалять/вставлять снова, поскольку информация о состоянии теперь довольно велика и хранится в нелокальной базе данных.
- поэтому сохраняется только дельта изменений
- чтобы вычислить дельту, необходимо отслеживать эталонные времена жизни
- в настоящее время хранится как
List<WeakReference>
при запуске - при выключении перебирать этот список и фактический UC, присутствующий на экране, добавлять/обновлять/удалять ключи соответственно
- отправить дельту в постоянство
Надеюсь, из вышеизложенного понятно.
Итак, теперь вопрос: почему бы просто не сохранить HashCode (только для пользовательского управления) вместо WeakReference
и исключить проверку нулевой ссылки при повторении по списку.
обновление 3 - спасибо всем, наконец-то собираюсь использовать слабую ссылку