Как бы я решил эту проблему профилирования производительности веб -сервера .NET?
-
29-09-2019 - |
Вопрос
Я использую 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, вероятно, называется виновником просто потому, что это метод, который заставляет перечисление в вашем случае. Если вы бросили в.