Действие задачи - кажется, у меня есть синтаксическая проблема
Привет,
Мне нужно перебрать большое количество файлов (обычно около 150 000 файлов ок. 48 МБ каждый) очень быстро и суммирует размеры файлов, а также количество файлов, показывая индикатор выполнения для пользователя.
Из образца MS я узнал эту параллель.ForEach кажется самым быстрым способом (пожалуйста, посмотрите на "что вы пробовали").
В byteCount начисляет штрафы, а результаты fileCount являются ложными. Вы наверняка поймете, что переменная 'fileCount' не заблокирована. К сожалению, я понятия не имею, как это сделать правильно, я сталкиваюсь с синтаксическими ошибками, что бы я ни пытался.
Не мог бы кто-нибудь из вас помочь мне с правильным синтаксисом, пожалуйста?
Кроме того, я не уверен, действительно ли это самый быстрый способ или есть что-то гораздо более простое, что я мог бы сделать.
Спасибо,
Мик
Что я уже пробовал:
Parallel.ForEach(files, Function() 0, Function(f As FileInfo, loopState As ParallelLoopState, local_bytes As Long, local_files As Long) If (f.Attributes And FileAttributes.Directory) = 0 Then local_bytes += f.Length End If Return local_bytes End Function, Sub(c) Interlocked.Add(total_bytes, c) ' byteCount total_files += 1 ' fileCount BeginInvoke(CType(Sub() pbVal = progBar.Value + increm If pbVal > 100 Then pbVal = 100 progBar.Value = pbVal End Sub, Action)) End Sub)
Gerry Schmitz
Вся концепция передачи взаимосвязанных переменных "значения" в качестве параметров функции не имеет смысла. Вы создаете общий класс / метод, который каждый использует для доступа к "блокировке" или использованию блокировки, рассматриваемой переменной; вы не передаете ее по кругу.