実行時にデスクトップアプリケーションでパネルにイメージ(各サイズは(40〜100 KB)です)を追加します。最初に、ユーザーはすべての画像をブラウズし、それらをパネル上にロードする。画像が次々にロードされると、タスクマネージャに表示されるメモリ使用量が急速に増加し、一定数の画像の後に「メモリ不足例外」が表示されます。私のコードのどこに欠陥がありますか?メモリ不足の例外なしでC#で1000個の画像をロード
700画像を読み込む前に、タスクマネージャーに1.05 GBというメモリ使用量が表示されます。タスクマネージャをロードした後 は2.04ギガバイトおよび2 GBのRAMが
int picnumber = 0;
int numberOfImages = 12;
numberOfImages = Convert.ToInt32(textBox1.Text.ToString());
for (int i = 0; i < numberOfImages; i++)
{
GroupBox gBox = new GroupBox();
picnumber++;
////////////////////////////////
// calculate the position of the groupbox where it is placed.
if ((picnumber % 3) == 1)
{
x = initX;
}
else
{
if ((picnumber % 3) == 0)
{
x = initX + 2 * (130 + 20);
}
else
{
x = initX + 130 + 20;
}
}
///////////////////////////////////
System.Drawing.Point CurrentPoint;
CurrentPoint = panel1.AutoScrollPosition;
y = initY + ((picnumber - 1)/3) * (130 + 20) - (Math.Abs(panel1.AutoScrollPosition.Y));
gBox.Text = picnumber.ToString();
//place the groupbox in the appropriate position.
gBox.Location = new System.Drawing.Point(x, y);
gBox.Size = new System.Drawing.Size(130, 130);
Bitmap btmap = new Bitmap(@"E:\43.jpg");
// attach the image to the groupbox
gBox.BackgroundImage = btmap;
**gBox.BackgroundImageLayout = ImageLayout.Stretch;
// add the groupbox that contains image to the panel.
panel1.Controls.Add(gBox);**
をオーバーフローしかし、私は例えば、「バッチ画像リサイズ、画像の膨大な数を読み込むことができますいくつかのアプリケーションを見て無視できるメモリを要するている示してい"(http://www.jklnsoft.com/)
アプリケーションはどのようにメモリを処理しますか?彼らはどのような仕組みですか?
700イメージをロードする前に、タスクマネージャは1.05 GBのメモリ使用量を示します。タスクマネージャをロードした後 は1.06ギガバイト
開発環境を示しています。 C#.NETのフレームワーク4、 のWindows XP、 のVisual Studio 2010を、 RAM:2ギガバイト
「ビットマップ」が削除されていないと思うので、この投稿はhttp:// stackoverflowに役立ちます。com/questions/2808753/right-way-to-dispose-image-bitmap-and-picturebox – V4Vendetta
これらの画像をロードする前に、アプリで1GBを使用しますか? –
私はuser1118321の答えを使用して、Chris Healdの答えと組み合わせて、あなたにうまく役立つと思います。 –