Pull to refresh

Comments 12

У одного из хостеров есть такой пунктик:
" Помимо защиты от DDoS на маршрутизаторе, дополнительно установлены ограничения на 30 одновременных соединений на реверсном прокси nginx и 30 одновременных соединений на MySQL. Что достаточно для того, что б злоумышленник не вывел сервер из строя.
"
parking.ru ушел у меня в ошибку 503 после теста с 90 юзерами ((
Повнимательнее почитайте литературу по linq to sql
1. (Из MSDN) Не пытайтесь повторно использовать экземпляры DataContext. Каждый DataContext сохраняет состояние (включая кэш идентификации) для одного определенного сеанса редактирования/запроса. Для получения новых экземпляров на основе текущего состояния базы данных используйте новый DataContext.
2. using можно не использовать. Дата контекст открывает и закрывает соединение когда это необходимо. IDisposable добавлен, видимо, для расширяемости.
При чем самое веселове это когда ошибку нельзя увидеть на сайте, но на SQL Server она в Event Log-е…
Кхе… Если оба этих метода вызываются с одной страницы, то нагрузка на сервер возрастает в 2 раза. У тебя 2 раза выполняется один и тот же запрос. Нельзя было как-то через отдельное свойство это сделать, которое инициализировалось бы в конструкторе?
да сейчас уже используется свойство, просто так нагляднее показать «ошибку» с датаконтекстом.
А то и в три, если тайтл выводится и в заголовок браузера, и на саму страницу
в 2 ибо было так:

[OutputCache(Location = OutputCacheLocation.Server, Duration = 600, VaryByParam = "None")]
    public ActionResult Catering()
    {
      ViewData["Title"] = "Кейтеринг";
      ViewData["PageText"] = CustomPages.PageText("Catering");
      ViewData["PageTitle"] = CustomPages.PageTitle("Catering");

      return View();
    }


* This source code was highlighted with Source Code Highlighter.


а стало так:

[OutputCache(Location = OutputCacheLocation.Server, Duration = 600, VaryByParam = "None")]
    public ActionResult Catering()
    {
      CustomPages page = new CustomPages("Catering");

      ViewData["Title"] = "Кейтеринг";
      ViewData["PageText"] = page.CustomPage.PageText;
      ViewData["PageTitle"] = page.CustomPage.PageTitle;

      return View();
    }


* This source code was highlighted with Source Code Highlighter.
в своем проекте, мы пользуемся такой техникой: создается один контекст на один запрос к серверу. реализуется очень просто.
Copy Source | Copy HTML
  1. /// <summary>
  2. /// Класс вспомогательных методов для работы с БД
  3. /// </summary>
  4. public static class DbHelper
  5. {
  6.     /// <summary>
  7.     /// Получаем объект-датаконтекст из текущего хранилища
  8.     /// </summary>
  9.     /// <typeparam name="T">
  10.     /// Тип контекста
  11.     /// </typeparam>
  12.     /// <returns>
  13.     /// Объект датаконтекста
  14.     /// </returns>
  15.     public static T Context<T>() where T : DataContext, IDataContext, new()
  16.     {
  17.         if (HttpContext.Current.Items[typeof(T).FullName] == null)
  18.         {
  19.             var obj = new T();
  20.             HttpContext.Current.Items[typeof(T).FullName] = obj;
  21.         }
  22.  
  23.         return (T)HttpContext.Current.Items[typeof(T).FullName];
  24.     }
  25.  
  26. }


пользоваться примерно так: var db = DbHelper.Context();
var db = DbHelper.Context&ltPlatformDataContext&gt();
Sign up to leave a comment.

Articles