2015-11-08 31 views
0

我使用c#.net CF 2.0爲Symbol MC75A創建軟件。我們掃描條形碼並返回庫存信息,但我試圖添加從網址獲取圖像的功能。每次掃描都會使用來自數據庫的新數據刷新屏幕,並從新網址獲取圖像。它掃描幾個條形碼並返回可能是4/5圖像而沒有問題,然後突然發生OutOfMemoryException。利用獲取圖像的代碼IM是:.net Compact Framework 2.0 - OutOfMemory異常下載圖像時

 public Bitmap GetImage(string URL) 
    { 
     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL); 
     myRequest.Method = "GET"; 

     myRequest.AllowWriteStreamBuffering = false; 



     HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); 

     System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream()); 
      myResponse.Close(); 


      return bmp; 

    } 

調用方式:

     pbImage.Image = GetImage(ProductImage); 
        pbImage.SizeMode = PictureBoxSizeMode.StretchImage; 

我已經嘗試過每一個新的處置圖像與pbImage.Image.Dispose GET(),但仍然得到同樣的例外。圖像大小在100KB到550KB之間。無論它是否有所不同,圖像尺寸每邊都超過1000像素。

我是否錯過了重新獲取之前處置的正確方式,或者它以某種方式緩存了所有這些圖像,然後創建了outofMemory異常?

+0

圖像進入臨時IE文件。您可能想要刪除瀏覽記錄。有時候使用像fiddler或wireshark這樣的嗅探器可以幫助隔離下載問題。 – jdweng

+0

它總是打破在同一個圖像? System.Drawing因拋出OutOfMem而出名的原因很多。這些可以通過try/catch來處理。 –

+0

您的myRespones.Close()應該位於finally或using塊中。你確定沒有其他例外嗎? –

回答

0

只要有人有權訪問圖像位置。對我來說更好的解決方法是創建一個名爲resize.aspx的網頁,並將圖片框從圖片文件名作爲參數填充。現在該頁面(位於與圖像相同位置的服務器上)能夠調整圖像大小並返回一個小的300x300px圖像。似乎是我能想到的最佳解決方案。如果您將圖像的完整url傳遞到另一個頁面,並且該頁面返回所需的縮略圖,則這也可以用於任何url的圖像。