【发布时间】:2014-10-02 21:09:43
【问题描述】:
我遇到的主要问题是,从我的 SQL Server CE 数据库中进行简单选择时,第一个查询的典型等待时间为 17 秒,每个后续查询的等待时间约为 5 秒。
让网站闲置几分钟后,17 秒的延迟又回来了。我假设延迟来自建立连接、缓存等,但我觉得在我们的 LAN 上这是一个荒谬的等待,对于外部用户只会变得更糟。
该站点是一个使用 SQL Server Compact 数据库 (v4.0.8876.1) 的 c#/ASP.NET 网站。这被部署到 IIS8 服务器。该网站旨在使用存储在数据库中的不同模型的系数来计算用户输入的值。
在连接/查询期间出现如此大的延迟,我做错了什么?
连接字符串:
<add name="DatabaseConnection"
connectionString="Data Source=|DataDirectory|\Database.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
查询:
string connstr = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;
using (SqlCeConnection conn = new SqlCeConnection(connstr))
{
string queryString = @"Select id, description, imagePath
from ConservationModels
where model = @modelName";
SqlCeCommand command = new SqlCeCommand(queryString, conn);
command.Parameters.AddWithValue("@modelName", modelName);
try
{
conn.Open();
SqlCeDataReader reader = command.ExecuteReader();
while (reader.Read())
{
modelID = (int)reader[0];
description = (string)reader[1];
imagePath = (string)reader[2];
}
reader.Close();
}
catch (Exception ex)
{
throw;
}
}
对于任何缺失的信息,我深表歉意,我感谢任何建议。如果有更好的方法来实现网站的目标,我会全力以赴。
【问题讨论】:
-
不要假设,测量。表中有多少条记录?模型字段是否被索引?
-
74 条记录,不,它没有被索引。我现在意识到这需要发生,因为 ID 是主键。一旦我弄清楚了,我会尽快更新。感谢您的评论。
-
74 条记录不应该对您的等待时间产生任何影响。也许第一次等待可能是由 ASP.NET 重新编译您的代码引起的,但它应该可以毫无延迟地工作
-
获取索引并将第一次查询减少到 15.4 秒。还是太多了。这也不在网站的初始负载上。这本身就需要一点时间,但我认为那是我读过的编译。
-
我们需要一个 Sql Server CE 专家来看看这个问题。我在您的代码中找不到任何可能导致这种延迟的弱点
标签: c# asp.net sql-server-ce iis-8