2012-04-23 55 views
0

我有一个100家酒店的列表,其中我必须显示每家酒店的10个图像。我为此使用了DataList控件。由于我的图像存储在不同的表中,所以我必须每次查询ItemDataBound事件中使用HotelId的图像列表。但每次该存储过程被称为大约需要6秒才能完成。所以对于100行的需要100 * 6秒,这里是我的代码reduce ItemDataBound事件时间

protected void dlSearchResult_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     if (ListItemType.Item == e.Item.ItemType || ListItemType.AlternatingItem == e.Item.ItemType) 
     { 
      HtmlGenericControl ul = (HtmlGenericControl)e.Item.FindControl("ulImages"); 
      DataSet dsImages = new DataSet(); 
      string HotelId=dlSearchResult.DataKeys[e.Item.ItemIndex].ToString(); 
      dsImages = SqlHelper.ExecuteDataset(Connection.ConnectionString, CommandType.StoredProcedure, "GetImage_ByHotelID", new SqlParameter("@HotelId", HotelId)); 

      StringBuilder listtext=new StringBuilder(); 

      if (dsImages.Tables.Count > 0) 
      { 
       for (int i = 0; i < dsImages.Tables[0].Rows.Count; i++) 
       { 
        listtext.Append("<li class='PX_sri_photos_0'><a href='#'> <img src='" + dsImages.Tables[0].Rows[i]["URL"].ToString() + "' alt='" + dsImages.Tables[0].Rows[i]["Caption"].ToString() + "' /></a></li>"); 
       } 
      } 
      ul.InnerHtml = listtext.ToString(); 


     } 
    } 

请给我方向,以优化我的代码

回答

0

你为什么不利用DataList控件,这是基本的结果一张桌子。这将避免从头开始构建数据集。循环被替换为使用sql数据适配器来填充数据集。创建一张表,其中包含100家酒店中每家酒店的酒店ID和10张图片的ID值之间的关系。在查询中加入2个表格,所得到的数据集应该改善图像在网页中加载的等待时间。我不能花时间编码,我在我的Android手机上。希望这些建议有帮助。 ADO.Net的运行速度与其他.Net数据协议一样快,但速度更快。