2016-10-27 6 views
0

В прошлом я использовал в основном синглтоны и статические классы для моего DAL, но было поручено создать новый DAL в среде MVC5 с высокой нагрузкой, где важна производительность.В высокоскоростном узле трафика с использованием MVC5 и ADO.net/Stored Procs, если DAL будет одиночным, статическим или запрограммированным классом для лучшей производительности

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

public class DAL 
{ 
    private DAL() 
    { 

    } 

    private static readonly DAL _singleton = new DAL(); 

    public static DAL Instance() 
    { 
     return _singleton; 
    } 
} 
+0

Вы вопрос не описываете проблему достаточно подробно. Является ли это сайтом с высоким трафиком, запрашивающим базу данных, где содержимое базы данных не меняется часто, или вы можете получать уведомления о соответствующих изменениях данных? Кэширование MVC-контроллера может помочь в этом типе сценария. См. Http://stackoverflow.com/questions/343899/how-to-cache-data-in-a-mvc-application –

+0

В основном очень высокий трафик, где содержимое базы данных огромно, но только обновляется ночью через пакетное задание. И все эти транзакции являются вставками; очень мало фактических запросов на обновление. – PleaseMakeItStop

ответ

1

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

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

+0

Спасибо за вход, у меня было ощущение, что это был случай – PleaseMakeItStop