【问题标题】:Very long request time VS2010请求时间很长 VS2010
【发布时间】:2012-02-24 13:43:13
【问题描述】:

我有一个小型 Web 应用程序,它从 Visual Studio 2010 中的 SQLdb 获取一些数据。当我尝试显示这个时,使用一个简单的下拉列表,在编译后第一次大约需要 15 秒,然后在 5 秒后每一个请求。我使用到 db 的 LINQ 连接和中继器来打印所有内容。它有四列和大约 50 行,所以数据不是那么混乱。如果我尝试占用 10 行,相同的响应时间也没关系。

我们在另一台安装了 VS2008 的计算机上测试了相同的东西,时间大约是 0.1 秒或类似的东西。我使用 .NET 3.5 并安装了所有最新更新(SP1 等)。

如果我查看跟踪,我发现代码中的这些行需要时间:

var cust = dbContext.Customers
    .Select(c => new
    {
        c.customerID,
        c.Email
    }).Take(10);

repeater.DataSource = cust;
repeater.DataBind();

有人知道什么会花费一些时间吗?

问候 丹尼尔

我已经尝试过其他方法:

SqlConnection connection = new SqlConnection(connectionString);

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = connection;
        cmd.CommandType = CommandType.Text; //default

        cmd.CommandText = "SELECT Email FROM Customer";

        cmd.Connection.Open();
        cmd.ExecuteNonQuery();
        cmd.Connection.Close();

它需要的时间一样长。我认为除了调用数据库的代码之外,肯定还有其他更根本的问题?

更多信息: 我做了一些跟踪,这是第一次加载页面:

Begin Raise ChangedEvents   0,00219604937555932 0,000014
After repeater has printed  15,8138335259613    15,811637
End Raise ChangedEvents 15,8138801733289    0,000047

第二次:

Begin Raise ChangedEvents   0,00219604937555932 0,000014
After repeater has printed  5,25090396258066    5,248825
End Raise ChangedEvents 25095106283536          0,000047

ChangeEvents 上发生了什么?

【问题讨论】:

  • 您是否尝试在 Take() 之后调用 ToList() ?
  • 您是否检查了数据库服务器以查看查询需要多长时间?
  • 顺便说一句,我会将cust 命名为更有意义的名称,例如customerEmailQuery,并将.Take(10); 移动到数据绑定行。明确区分表示 linq 查询的变量和查询结果的变量非常重要。
  • 它也可能是最初的 asp.net 启动 - 您是否在 VS2010 机器上的 IIS 中托管网站?例如,请参阅stackoverflow.com/questions/2221292/…
  • @dash:我在我的 VS2010 机器上托管..

标签: c# asp.net .net visual-studio


【解决方案1】:

获取 LINQ 生成的实际 SQL,将其复制粘贴到您的数据库管理工具中,并查看执行计划以识别潜在的性能问题。

您可以使用数据上下文的Log 属性查看实际的SQL。在控制台应用程序中,您可以这样做:

dbContext.Log = Console.Out;
// ...

或者,将 SQL 写入文件,如下所示:

using (var writer = new StreamWriter("sql.log")) {
    dbContext.Log = writer;
    // ....
}

此外,可能值得在 LINQ 表达式的末尾添加 ToList()ToArray(),以确保不会无意中重新执行它。

【讨论】:

  • 我认为查询没有任何问题,尽管它在另一台装有 vs2008 的计算机上工作正常......
【解决方案2】:

我不知道我做了什么让它工作..只是继续在代码中的其他地方做一些事情并更新了最新的 Windows 更新..嗯..现在它像一个魅力一样工作,一定是 VS2010 中的一个错误?? 不过感谢所有建议,学到了一些很棒的东西!

问候

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 2018-11-10
    • 2013-08-02
    • 1970-01-01
    • 2015-02-28
    • 2020-10-17
    • 2016-11-07
    • 2020-03-19
    • 2019-12-02
    相关资源
    最近更新 更多