Расширение стека в приложении - PullRequest
2 голосов
/ 28 декабря 2011

У меня есть не слишком сложная проблема, которую я не знаю, как решить в VB.NET 2010.

В настоящее время у меня есть рекурсивная процедура для поиска файлов / или поиска.С помощью рекурсивной процедуры я никогда не завершаю вызов до конца, и рост процесса достаточно значительный, чтобы радикально замедлить процесс с уже большим стеком.

Чтобы ухудшить ситуацию, я использую подпрограммы предварительного кодирования, которые будут использовать подстановочные знаки.Что это:

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, ByRef lpFindFileData As WIN32_FIND_DATA) As Integer
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Integer, ByRef lpFindFileData As WIN32_FIND_DATA) As Integer
Public Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Integer
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Integer) As Integer
Public Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Long) As Long

Как мне «вылечить» это?Они не поддаются нерекурсивной среде.

1 Ответ

1 голос
/ 28 декабря 2011

.NET 4.0 теперь содержит функции перечисления файлов в одном вызове метода ( Directory.EnumerateFiles Метод):

Возвращает перечисляемую коллекцию имен файлов, которые соответствуют запросу шаблон по указанному пути и, при необходимости, ищет подкаталоги.

List<string> files = Directory.EnumerateFiles(startFolder, "*.txt", 
                                              SearchOption.AllDirectories).ToList();

VB.NET версия:

Dim files As List(Of String) = Directory.EnumerateFiles(startFolder, "*.txt", SearchOption.AllDirectories).ToList()
...