Не на 100% понятно, что вы пытаетесь достичь sh, но вы можете улучшить производительность, реализовав Directory.EnumerateFiles
.
Кроме того, вы можете связать это со встроенной функцией поиска, используя подстановочный знак против известного ссылочного ключа из списка ссылок.
Наконец, если каталог изображений не подвергается частым изменений, вы можете кэшировать изображения в словаре, чтобы ускорить поиск в будущем.
Вот примерный пример этих идей. Примечание. Я удалил все ссылки на элементы управления формы и предполагаю, что вместо этого передаются параметры.
Private _imageMap As Dictionary(Of String, ICollection(Of String))
Public ReadOnly Property ImageMap As Dictionary(Of String, ICollection(Of String))
Get
If _imageMap Is Nothing Then
_imageMap = New Dictionary(Of String, ICollection(Of String))()
End If
Return _imageMap
End Get
End Property
Public Sub RefreshImageMap()
_imageMap = Nothing
End Sub
Public Function GetImagePaths(imageFolder As String, referenceKey As String) As ICollection(Of String)
Dim imagePaths As ICollection(Of String) = Nothing
If Not ImageMap.TryGetValue(referenceKey, imagePaths) Then
imagePaths = Directory.EnumerateFiles(imageFolder, $"{referenceKey}_*.jpg").ToList()
ImageMap.Add(referenceKey, imagePaths)
End If
Return imagePaths
End Function
Также, если вы хотите запустить несколько ссылочных ключей через функцию, но также необходимо сохранить исходную ссылку key, вы можете добавить что-то вроде этого:
Public Iterator Function GetImagePaths(imageFolder As String, referenceKeys As IEnumerable(Of String)) As IEnumerable(Of KeyValuePair(Of String, ICollection(Of String)))
For Each referenceKey As String In referenceKeys
Dim imagePaths = GetImagePaths(imageFolder, referenceKey)
Yield New KeyValuePair(Of String, ICollection(Of String))(referenceKey, imagePaths)
Next
End Function
Ничего из этого не проверено, и в нем отсутствуют надлежащие проверки параметров функций, но это должно дать вам направление, чтобы попробовать.