Image.FromFile非常慢

时间:2016-06-27 17:37:46

标签: .net vb.net winforms infragistics

我正在尝试在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

1 个答案:

答案 0 :(得分:3)

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")