Ответ 1
Ресурсы строк кэшируются в памяти. Посмотрите на код, сгенерированный в "Resources.Designer.cs"
.
Он использует System.Resources.ResourceManager
, и это делает кеширование строк.
Также обратите внимание на этот конструктор ResourceManager. В нем упоминается, что вы можете изменить стратегию кеширования:
Этот конструктор использует системную реализацию ResourceSet. Чтобы использовать формат файла пользовательского ресурса, вы должны получить Класс ResourceSet, переопределить GetDefaultReader и GetDefaultWriter методы и передать этот тип в ResourceManager (String, Assembly, Тип). Использование настраиваемого ResourceSet может быть полезным для управление политикой кэширования ресурсов или поддержка вашего собственного ресурса формат файла, но, как правило, не требуется.
(мой акцент)
Документация для ResourceSet
явно говорит:
Класс ResourceSet перечисляет в IResourceReader, загружая каждое имя и значение и сохраняя их в Hashtable
Итак, мы знаем точную стратегию кэширования, которую вы получите по умолчанию.
[EDIT] Поскольку вы, кажется, не верите мне!:)
(1) Посмотрите документацию для конструктора ResourceManager (string baseName, Assembly assembly). В нем указано:
Этот конструктор использует системную реализацию ResourceSet.
(2) Теперь просмотрите документацию для ResourceSet. В нем указано:
Класс ResourceSet перечисляет над IResourceReader, загружая каждое имя и значение и сохраняя их в Hashtable.
Поэтому это поведение кэширования действительно документировано в MSDN, и, кроме того, вы можете проверить, что это происходит с помощью Resharper для проверки реализации.