Image.FromFile 非常非常慢

Image.FromFile is very very slow

我正在尝试在 infragistics ultrawingrid 中加载图像图标。为此,我正在尝试初始化行并根据条件加载相应的图像。

但是我在尝试使用 Image.FromFile()

时性能非常慢

请建议如何修复以加快网格加载速度

    Private Sub ugMain_InitializeRow(sender As Object, e As InitializeRowEventArgs) Handles ugMain.InitializeRow
    If e.Row.Cells("Delays").Value = 0 Then
        e.Row.Cells("Indicator").Value = Image.FromFile("Images\RoundedGreen.png")
    Else
        e.Row.Cells("Indicator").Value = Image.FromFile("Images\RoundedRed.png")

    End If
End Sub

Image.FromFile 并不慢,但是您为每条记录调用它的方式,可能 会对您造成一些性能损失。您正在调用与每一行的文件系统交互的方法。

您可以使用以下任一选项,而不是从文件系统为网格中的每一行加载这些图像:

  • 您可以加​​载这些图像一次并将它们放入 List<Image> 中,然后每次需要它们时,按索引从列表中获取图像,例如 Images[0]。如果您想按键访问这些图像,可以使用 Plutonix 提到的 Dictionary<string , Image>,然后您可以使用 Images["RoundedGreen"] 获取图像。

  • 您可以使用应用程序的 Resources.Resx 文件在编译时存储这些图像,而不是依赖文件系统上的图像。然后每次你需要在 运行 时使用这些图像,你可以使用 My.Resources.RoundedGreen.

  • 找到它们

例子

例如,您可以在表单级别定义 Images 成员:

Dim Images As Dictionary(Of String, Image) = New Dictionary(Of String, Image)()

然后在某处,例如在表单的Load事件中,加载图像:

Images.Add("RoundedGreen", Image.FromFile("Path to RoundedGreen image"))
Images.Add("RoundedRed", Image.FromFile("Path to RoundedRed image"))

然后,无论您需要在何处使用这些图像,都可以通过以下方式从 Images 会员处获取:Images("RoundedGreen")