在 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
如果您需要更改图像,请先将资源属性分配给字段,然后在需要时使用这些字段设置单元格值。
我认为我在做一些很愚蠢的事情,但找不到替代方案!
我有一个我的表单要处理的文件列表,我正在使用 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
如果您需要更改图像,请先将资源属性分配给字段,然后在需要时使用这些字段设置单元格值。