我在用 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()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top