在 DataGridView 中重复显示相同的图像而不会过度使用内存

Showing the same image repeatedly in a DataGridView without memory over-use

我认为我在做一些很愚蠢的事情,但找不到替代方案!

我有一个我的表单要处理的文件列表,我正在使用 datagridview 显示所有文件以及我在列表中的进度。我有一个 "waiting" "processing" 和 "done" 图片资源,把它们都扔到 DataGridViewImageColumn.

For Each file As String In folderListing
     DataGridView1.Rows.Add(file, My.Resources.WaitingImg)

Next

问题是,它似乎为每个图像使用了一小块 RAM,当我在测试中有 5,000 个时 运行 它使用了 4Gb...

我该怎么做才能让它只加载一次资源,但会在成百上千个地方显示它?

不要重复使用 My.Resources 中的任何 属性。每次使用这样的 属性 时,它都会从资源中提取数据并创建一个新对象。在任何特定上下文中,获取 属性 一次,分配给一个变量,然后多次使用该变量,例如

Dim waitingImg = My.Resources.WaitingImg

For Each file As String In folderListing
     DataGridView1.Rows.Add(file, waitingImg)
Next

如果您需要更改图像,请先将资源属性分配给字段,然后在需要时使用这些字段设置单元格值。