【发布时间】: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