2016-06-27 11 views
2

Я пытаюсь загрузить значок изображения в infragistics ultrawingrid. Для этого я пытаюсь выполнить инициализацию строки и на основе условия, которое я загружаю для соответствующего изображения.Image.FromFile очень медленный

Но у меня очень низкая производительность, когда я пытаюсь использовать 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 
+0

Сколько у вас изображений? – Plutonix

+2

Если это код, который вы хотите запустить для каждой строки, то вместо доступа к файлам для каждой строки загрузите эти изображения один раз и поместите их в «Список » и используйте их из этого списка каждый раз, когда вам нужно. –

+0

Имеются два разных изображения. Зеленый значок и красный значок. Я не могу загрузить все изображения сразу, потому что каждая строка должна удовлетворять условию, основанному на нем. Я могу показать зеленое изображение или красное изображение. – user1030181

ответ

3

Image.FromFile не медленно, но, как вы вызываете его для каждой записи может вызывать у вас некоторые штрафные санкции. Вы вызываете этот метод, который взаимодействует с файловой системой для каждой строки.

Вместо загрузки этих изображений из файловой системы для каждой строки в сетке, вы можете использовать любой из этих вариантов:

  • Вы можете загрузить эти изображения один раз и поместить их в List<Image>, а затем каждый раз, когда вам нужны они, например, получить изображение из списка по индексу, Images[0]. Если вы хотите получить доступ к этим изображениям по ключу, вы можете использовать Dictionary<string , Image>, как указано Plutonix, а затем вы можете получить изображение, используя, например, 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")

+0

Производительность теперь лучше. Но для загрузки 14k записей с изображениями требуется примерно 2 секунды. До тех пор, пока сетка не будет пуста, я смогу отобразить некоторое ожидание почасового стекла – user1030181

 Смежные вопросы

  • Нет связанных вопросов^_^