【问题标题】:How would I solve this .net web server performance profiling issue?我将如何解决这个 .net Web 服务器性能分析问题?
【发布时间】:2011-05-18 16:12:48
【问题描述】:

我正在使用 redgate performance profiler 来测试我的 asp.net mvc 2 应用程序。我发现其中一件事是 XMLSerializer 占用了过多的 CPU 时间,因此请参阅 this post。我现在将其更改为使用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 秒.. 是否只是因为我同时模拟 80 个用户并且数据库(sql server 2005)方面存在一些问题,例如表太大和索引等等...我会调查的,但目前我正在尝试确定您在代码中看到的任何问题,即 C# 方面的问题..

感谢您的帮助!

【问题讨论】:

  • 您是否有权访问发送到服务器的 SQL 语句,例如SQL Management Studio?,也许从 Linq 生成的 SQL 不是最理想的

标签: .net xml-serialization performance redgate


【解决方案1】:

这假定最高时间是“包含时间”,而不是“不包含时间”。

包含时间意味着它包括方法调用的任何代码,在这种情况下FirstOrDefault 将执行数据库调用。数据库调用在延迟的情况下代价高昂,但 CPU 线程在等待数据库调用时被阻塞并且不使用 CPU。

首先您应该问自己这是否是一个问题,它不会显着影响吞吐量(假设数据库服务器可以处理负载),但会影响您的调用延迟。

如果这是一个问题,您需要加快实际 SQL 查询的速度。您应该启动 SQL 探查器,捕捉实际问题,然后在 SQL 管理工作室中运行它。查看执行计划以查看查询是否比预期慢,并尝试找出原因。如果它太慢,您可以检查您的索引以开始。

【讨论】:

    【解决方案2】:

    FirstOrDefault 可能被称为罪魁祸首,仅仅是因为它是在您的案例中强制枚举的方法。如果你在它之前加入一个 .ToList(),你会发现负担转移到了 .ToList()。

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多