Как бы я решил эту проблему профилирования производительности веб -сервера .NET?

StackOverflow https://stackoverflow.com/questions/4327600

Вопрос

Я использую Redgate Performance Profiler Чтобы проверить мое приложение ASP.NET MVC 2. Одна из вещей, которые я узнал, заключалась в том, что XMLSerializ эта почта. Анкет Я изменил его на место, где он использует XmlSerializerCache Теперь.

Теперь проблему XMLSerializer больше нет, и я профиляю приложение, моделируя 80 пользователей одновременно, используя веб -сайт с JMeter. Итак, теперь лучшие методы, которые занимают время, делают FirstOrDefault() На некоторых данных, которые я тяну, я приведу пример-

var values=(from c in DataContext.Table1
           join s in DataContext.Table2 on new { c.Id, c.date } 
            equals new { s.Id, s.date } into list
                          where c.Id== Id && c.date == date
                          from s in list.DefaultIfEmpty()
                          select new DayDTO()
                          {
                              Points = c.points,
                              Points1 = c.points1,
                              Points2 = c.points2,
                              Points3 = c.points3,
                              Points4 = c.points4
                          }).FirstOrDefault();

Кто -нибудь может предложить мне, что я могу сделать, чтобы улучшить это? Текущее время составляет 25 секунд и 16 секунд для 2 лучших методов. Это просто потому, что я моделирую 80 пользователей одновременно, и есть некоторые проблемы на стороне базы данных (SQL Server 2005), как таблица, которая слишком большая и индексация и т.д. ... и я рассмотрю это, но в настоящее время я пытаюсь определить любые проблемы, которые вы видите с помощью проблем, т.е. на стороне C# ..

Я был бы признателен за любую помощь, спасибо!

Это было полезно?

Решение

Это предполагает, что главное время - «инклюзивный раз», а не «исключительное время».

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

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

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

Другие советы

Firstordefault, вероятно, называется виновником просто потому, что это метод, который заставляет перечисление в вашем случае. Если вы бросили в.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top