我在小型Web应用程序中从Visual Studio 2010中的SQLdb获取一些数据。当我尝试显示此内容时,使用简单的下拉列表,在编译后第一次需要大约15秒,然后在5秒后每一个要求。我使用LINQ连接到db和转发器来打印所有内容。这是四列和大约50行,所以不是mutch数据。如果我尝试采用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();
任何人都知道什么可以采取som mutch时间?
此致 丹尼尔
我尝试过另一种方法:
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();
它需要同样长的时间......除了代码之外,还有一些其他更基本的问题需要调用db我认为吗?
更多信息: 我做了som跟踪,这是第一次加载页面:
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发生了什么?
答案 0 :(得分:1)
获取LINQ生成的实际SQL,将其复制粘贴到数据库管理工具中,并查看执行计划以确定潜在的性能问题。
您可以使用数据上下文的Log属性来查看实际的SQL。在控制台应用程序中,您可以执行以下操作:
dbContext.Log = Console.Out;
// ...
或者,将SQL写入文件,如下所示:
using (var writer = new StreamWriter("sql.log")) {
dbContext.Log = writer;
// ....
}
此外,可能值得在LINQ表达式的末尾添加ToList()
或ToArray()
,以确保它不会被无意中重新执行。
答案 1 :(得分:0)
我不知道我做了什么让它工作..只是继续做代码中的其他地方的东西和更新最新的Windows更新..嗯..现在它的工作就像一个魅力,必须是VS2010中的一个错误?? 感谢所有的建议,学到了一些很棒的东西!
此致