Как автоматически создать экземпляр синглтона после сборки? - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть приложение ASP.NET 2 C #, которое использует Singleton для загрузки большого списка данных из базы данных.

Первый запрос на этот синглтон очень медленный (как и ожидалось). Последующие очень быстрые. Есть ли способ создать экземпляр синглтона, как только проект будет построен?

Ответы [ 3 ]

0 голосов
/ 17 ноября 2011

Создайте его как класс конфигурации App_Start с WebActivator .

Если ваше приложение настроено как виртуальный каталог, код в App_Start будет вызываться сразу после сборки.

Обратите внимание, это создаст впечатление, что ваши сборки "медленные". Также обратите внимание, что если вы получите исключение во время этого кода, вы фактически получите «сбой сборки» с непонятным сообщением об ошибке, похожим на:

Exception has been thrown by the target of an invocation.. ASPRUNTIME ProjectName

Это означает, что вам нужно перейти к своему приложению в браузере, чтобы увидеть реальное сообщение об ошибке.

Мы столкнулись со всем этим, когда связали EF Migrations с конфигурацией App_Start.

0 голосов
/ 17 ноября 2011

Вы можете поместить код для заполнения синглтона в методе Application_Start в global.asax.cs.

С MSDN :

Вызывается, когда запрашивается первый ресурс (например, страница) в приложении ASP.NET. Метод Application_Start вызывается только один раз в течение жизненного цикла приложения. Этот метод можно использовать для выполнения задач запуска, таких как загрузка данных в кэш и инициализация статических значений.

0 голосов
/ 17 ноября 2011

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

Есть ли конкретная причина, по которой вы загружаете большой объем данных из базы данных в синглтон?

...