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