2016-12-21 3 views
0

Что касается Web Api, то статические классы загружаются в память по каждому запросу? Если нет, что следует использовать для использования одного и того же статического класса для каждого запроса и загрузки его в память один раз? Я думаю о загрузке класса, содержащего словарь.Веб-Api и статические классы

ответ

1

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

Важно отметить, что если ваше приложение работает под управлением IIS, и вы настроите его, чтобы разрешить несколько экземпляров процессов, тогда эти экземпляры НЕ будут совместно использовать экземпляры статического класса, поскольку они находятся в разных процессах. Это не значение по умолчанию - если вы используете параметры IIS по умолчанию, то только один процесс будет обслуживать запросы, и вы будете в порядке - в противном случае вам понадобится другой подход, например вторичный общий кэш или служба или база данных в памяти, затем становится общим хранилищем для словаря.

0

Статический тип инициализируется только один раз для домена приложения и только при наличии ссылки. Web API 4.x и предыдущая (не основная версия) размещаются в IIS, который размещает сайт в своем домене домена 1 домена на сайт.

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

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