如何解决此.NET Web服务器性能分析问题?
-
29-09-2019 - |
题
我在用 Redgate Performance Profiler 测试我的ASP.NET MVC 2应用程序。我发现的一件事是XMLSerializer花费了太多的CPU时间,因此从 这个帖子. 。我将其更改为使用的位置 XmlSerializerCache
现在。
现在,XMLSerializer问题不再存在,我正在通过同时使用Jmeter网站模拟80个用户来分析应用程序。因此,现在需要时间的主要方法正在做 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秒。等...我将研究一下,但是目前我正在尝试确定您在C#方面的代码IE问题所看到的任何问题。
感谢您的任何帮助!
解决方案
这假设最高时间是“包容时间”,而不是“独家时间”。
包含时间意味着它包括该方法调用的任何代码,在这种情况下 FirstOrDefault
将执行数据库调用。在延迟的上下文中,数据库调用很昂贵,但是CPU线程被阻止,并且在等待数据库调用时不使用CPU。
首先,您应该问自己这是否是一个问题,它不会显着影响吞吐量(假设数据库服务器可以处理负载),而是呼叫的延迟。
如果这是一个问题,则需要加快实际SQL查询。您应该启动SQL Profiler,查看实际问题,然后在SQL Management Studio中运行它。查看执行计划,以查看查询是否比预期的要慢,并尝试找出原因。如果太慢,您可能会检查索引开始。
其他提示
FirstOrdeFault可能被称为罪魁祸首,仅仅是因为它是在您的情况下强迫枚举的方法。如果您在它之前将.tolist()放在.tolist()之前,您会发现负担转移到.tolist()。
不隶属于 StackOverflow