2011-11-11 4 views
3

У меня есть список только для чтения, который является общим для всех экземпляров приложения и не будет меняться очень часто. Является ли хорошей практикой создание свойства в статическом классе для доступа к этому списку? список заполняется из базы данных в статическом конструкторе. Настройка пула приложений на переработку каждую ночь гарантирует, что список будет обновляться каждый день правильно? Есть ли какие-то причины, это плохая идея? Благодаря!Хорошо ли это для статического класса?

+2

звучит нормально для меня. Однако ничего, что нельзя было бы сделать со структурой/(запечатанным) классом; любой тип может содержать статические члены – sehe

+1

О, и подумайте о детях: опубликуйте свой список как немодифицируемую коллекцию. – sehe

ответ

2

Ничего плохого в статическом классе. Вы также можете использовать кеш, который будет работать аналогичным образом. Кэш дает вам дополнительный бонус, который может привести к недействительности кеша по времени по вашему выбору.

2

Это похоже на хорошее решение. Вместо этого вы можете использовать закрытый класс, чтобы избежать использования подклассов.

Проблема с глобальным состоянием - это когда оно изменяется приложением. В этом случае это не проблема.

+1

Как бы вы опечатали статический класс? – sehe

+0

@sehe - Спасибо, что заметили это. – Oded

+0

Вы не можете добавить опечатанные в статические классы - не было бы смысла, они неявно запечатаны. – blowdart

0

Вы должны понимать, как сохраняются статические свойства.

Грубое, все статическое состояние помещается в экземпляр RuntimeType (который, в свою очередь, создается при вызове static ctor). CLR через C# описывает этот механизм в деталях.

В свете этого, эта коллекция будет доступна для всех экземпляров, но вы должны иметь в виду все потенциальные утечки памяти (представьте себе ситуацию, когда вы подписываетесь на события коллекции, и все страницы стали доступны даже тогда, когда они закрыты и т. д.)

Второй недостаток такого подхода заключается в том, что этот сборник не является современным. Третий недостаток заключается в том, что вам необходимо позаботиться о безопасности потоков этой коллекции, что, в свою очередь, повредит вашей производительности.

Смежные вопросы