0

我在这里遇到了真正的头痛。

我有一个小程序,它显示一些存储在磁盘上的图像。一次在listview中显示8张图片,但是当图片足够大时,内存使用(根据任务管理器)达到1300mb以上!我怀疑有些图像或某些东西没有被释放,但我似乎无法准确指出在哪里。我已经尝试在 listview.largeimagelist.images 中处理所有图像,尝试 Clear()'ing 图像列表,但它根本没有任何区别。

这是当前代码:

    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;
    }
4

0 回答 0