簡體   English   中英

HTTP處理程序對圖像數組的處理效率低下

[英]HTTP Handler Inefficient for an array of images

我有一個HTTP處理程序,它從數據庫返回存儲為VARBINARY(MAX)圖像。 RepeaterImageURL屬性設置為:

ImageUrl='<%# "~/ImageHandler.ashx?PictureId=" + Container.DataItem.ToString() %>' 

有用。 但是,此代碼的真正問題是頁面的Page_Load方法從數據庫返回“ PictureId”的列表,然后“ ImageHandler.ashx”對每個圖像分別進行單獨的數據庫調用 到數據庫的往返太多了。

我正在尋找一種方法來一次獲取所有圖像並將其顯示在Repeater 直到我意識到沒有可用的緩存,將圖像轉換為Base64似乎是一個可行的選擇。 我還能怎么做? 我對HTTP處理程序的工作很滿意,但是必須一槍而行。 有任何想法嗎?

好吧,您正在使用的方法將為每個單獨的調用提供相同的結果,就像您使用PictureId獲取數據庫中的每個唯一圖像一樣。

方法1。

為了解決您所關心的問題,您首先要做的是打數據庫,並從數據庫中獲取所有圖像並保存在通用列表中。 現在,從該通用列表解析圖像並將其提供給中繼器。

方法2。 我沒有嘗試遵循以下代碼,但我希望它可以使您了解如何獲得所需的代碼。

要使圖像在中繼器控制中無效:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ConnectionStrings:ConnectionString %>" SelectCommand="SELECT Image FROM Images">
</asp:SqlDataSource>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="Repeater1_ItemDataBound">
   <itemtemplate>
      <asp:HiddenField Value='<%# Eval("id") %>' ID="HiddenField1" runat="server" />
      <asp:Image ID="Image1" runat="server" />
   </itemtemplate>
</asp:Repeater>

並在aspx.cs中

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
   HiddenField hf =  e.Item.FindControl("HiddenField1") as HiddenField;
   if (hf != null)
   {
       string val = hf.Value;
       Image img = e.Item.FindControl("Image1") as Image;
       img.ImageUrl =  string.Format("data:image/jpg;base64,{0}",val);
   }
}

注意:您不能使用HTTP Handler一次基於PictureId獲取所有圖像。

編輯->

除了您的緩存問題外,事實是,如果沒有圖像(對於瀏覽器為HTTP資源)實際存在於您的服務器緩存中,則Web瀏覽器將無法提供該圖像。 您可以做的是1)使用客戶端腳本通過構建API從服務器調用圖像2)或進行Base64轉換,因為它沒有其他選擇,盡管它將增加帶寬利用率

您基本上將兩個不同的問題合而為一。 因為克服多個請求的HTTP處理程序是一種情況,而提供緩存則是另一種情況。

對於Web瀏覽器緩存功能,如我所說,您應該在Web服務器上存在http資源(圖像文件),但是如果您擔心性能,然后選擇緩存,則可以使用某種壓縮機制來壓縮圖像,這樣可以節省一些帶寬和頁面的加載時間。 這里有一個很好的讀取 如果仍然無法解決問題,請發表評論或將其標記為答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM