0

たくさんの画像を使ったアプリを作っています。アプリケーションはサーバーから画像を取得し、一度に1つずつダウンロードします。多くの画像の後、ビットマップを作成すると例外が返されますが、これを解決する方法がわかりません。画像をダウンロードするための私の機能は次のとおりです。

 public static Bitmap getImageFromWholeURL(String sURL)
    {

        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(sURL);
        myRequest.Method = "GET";


        // If it does not exist anything on the url, then return null
        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
            myResponse.Close();
            return bmp;
        }
        catch (Exception e)
        {
            return null;
        }

      }

誰かがここで私を助けることができますか?前もって感謝します!

4

4 に答える 4

1

その応答をメモリに保持するのではなく、ディスクにストリーミングします。次に、画像自体ではなく、一時的な場所に保存した画像に関する情報を保持します。

于 2010-04-14T12:06:45.377 に答える
1

これらすべてをPictureboxに表示している場合(そしてあなたのコメントに基づいて)、古い画像を破棄する必要があります(このブログエントリはそれを説明するのに役立ちます):

if(myPictureBox.Image != null)
{
    myPictureBox.Image.Dispose();
}
myPictureBox.Image = getImageFromWholeURL(url);

スタイルに関する補足として、メソッド名はキャメルケースではなくPascalCaseであると想定されており、パラメーターに関するハンガリーの概念は失われます。

于 2010-04-14T13:06:28.690 に答える
0

「多くの画像」はもちろん、メモリ不足と密接に関連しています。ビットマップは大きくなる可能性があり、管理されていない仮想メモリを大量に消費します。プログラムをよりスマートにし、メモリに保存するビットマップを少なくする必要があります。または、一時的にファイルに保存します。または、必要に応じて再ダウンロードしてください。また、Dispose()メソッドを使用してリソースを適切にクリーンアップします。これは、Bitmapクラスにとって特に重要です。

于 2010-04-14T11:59:59.060 に答える
0

System.Drawing.Bitmapオブジェクトで何をしますか?それらすべてをメモリに保持していますか?そうすると、ある時点でメモリ不足の例外が発生することは避けられません。

ニーズに基づいて、ある時点で画像を破棄する必要があります。必要な場合は、フラッシュ内のファイルに保存してください。また、小さいサイズのファイルを使用してみてください。

于 2010-04-14T12:00:16.733 に答える