【发布时间】:2011-03-28 19:43:53
【问题描述】:
我有这个 linq 查询:
public static Banner getSideBarBanner(){
DataClassesDataContext db = new DataClassesDataContext();
var bannerSiderBar = (from b in db.Banners
where b.Position.Equals(EBannersPosition.siderbar.ToString())
&& b.Visible == true
select b).FirstOrDefault();
return bannerSiderBar;
}
好吧,我使用 dotTrace 来分析应用程序,我发现查询执行需要很长时间(超过 2 秒)
我只是想知道,为什么要花这么多时间,尤其是当我的 Banner 表有大约 30 条记录时!!!
提前感谢您的意见...
更新: Banner的表格架构:
更新 2:如果我使用简单的 SQL 连接而不是 linq,查询执行需要 700 毫秒,这是一个巨大的改进......
public static Banner getSideBarBanner()
{
Banner bannerFound = new Banner();
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Library_prodConnectionString"].ConnectionString);
try
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand("SELECT path, link FROM Banner b WHERE b.Position = @position AND b.Visible = 1 ", myConnection);
myCommand.Parameters.Add(new SqlParameter("@position", EBannersPosition.siderbar.ToString()));
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
if (myReader["path"] != null)
bannerFound.Path = myReader["path"].ToString();
if (myReader["link"] != null)
bannerFound.Link = myReader["link"].ToString();
}
myConnection.Close();
}
catch (Exception e)
{
CreateLogFiles Err = new CreateLogFiles();
Err.ErrorLog(HttpContext.Current.Server.MapPath("~/Site/Logs/ErrorLog"), e.ToString());
}
return bannerFound;
}
这告诉我,将 linq 查询转换为 sql 的性能很差……你怎么看?
【问题讨论】:
-
如果不了解您的数据库、架构、网络配置(可能从您到数据库有很多延迟)等,这是无法判断的。
-
你也用过SQL Server Profiler吗?
-
@Robert Harvey:不,没有索引位置,但是当我有这么小的桌子时,这有关系吗?
-
也许我们可以看到 dotTrace 的其余部分?
-
@Robert Harvey:我已经用更详细的图像替换了初始分析图像......