ここで本当に頭が痛くなりました。
ディスクに保存されている画像を表示する小さなプログラムがあります。一度に 8 つの画像がリストビューに表示されますが、画像が十分に大きい場合、(タスク マネージャーによると) メモリ使用量は 1300 MB を超えます! 割り当てが解除されていない画像または何かがあると思われますが、正確にどこを特定することはできないようです。listview.largeimagelist.images のすべての画像を破棄しようとしましたが、画像リストを Clear() しようとしましたが、まったく違いはありません。
現在のコードは次のとおりです。
private void btnLoadNewImages_Click(object sender, EventArgs e)
{
int k = lsvImgResult.Items.Count;
for (k = lsvImgResult.Items.Count; k >= 1; k--)
{
Seen.Push((MyFile)lsvImgResult.Items[k - 1].Tag);
imageList.Images.Clear();
}
int i = 0;
lsvImgResult.Items.Clear();
DisplayedImages.Clear();
imageList.Images.Clear();
imageList.ImageSize = new Size(100, 100);
imageList.ColorDepth = ColorDepth.Depth32Bit;
int HowMany = 0;
if (UnSeen.Count >= 8)
{
HowMany = 8;
}
else
{
HowMany = UnSeen.Count;
}
for (i = 1; i <= HowMany; i++)
{
MyFile CurFile = UnSeen.Pop();
Image j = Image.FromFile(CurFile.Filename);
DisplayedImages.Enqueue(CurFile);
imageList.Images.Add(j);
}
lsvImgResult.LargeImageList = imageList;
for (int j = 0; j < imageList.Images.Count; j++)
{
ListViewItem lstItem = new ListViewItem();
lstItem.ImageIndex = j;
lstItem.Tag = DisplayedImages.Dequeue();
lstItem.ToolTipText = ((MyFile)lstItem.Tag).Filename;
lsvImgResult.Items.Add(lstItem);
}
tabImagesLeft.Text = "Images left: " + UnSeen.Count;
}