【问题标题】:Image.FromFile is very very slowImage.FromFile 非常非常慢
【发布时间】:2016-06-27 17:37:45
【问题描述】:

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

【问题讨论】:

  • 有多少种不同的图像?
  • 如果它是您想要为每一行运行的代码,那么不是每行的文件访问,而是加载这些图像一次并将它们放入 List<Image> 并每次从该列表中使用它们你需要。
  • 有两个不同的图像。绿色图标和红色图标。我不能一次加载所有图像,因为每一行都必须满足基于它的条件我可以显示绿色图像或红色图像
  • @RezaAghaei 怎么样
  • ImageFromFile 也不太可能很慢,但是在修改后重新绘制每一行会加剧问题。我会使用字典,但加载一次图像的集合是关键

标签: .net vb.net winforms infragistics


【解决方案1】:

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

【讨论】:

  • 性能现在更好了..但是需要大约 2 秒才能加载 14k 条记录和图像。在那之前,网格是空白的,我可以显示一些等待的小时玻璃
猜你喜欢
  • 2015-05-22
  • 2017-12-12
  • 2015-06-14
  • 2013-05-14
  • 2021-05-24
  • 1970-01-01
  • 2012-05-28
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多