У меня есть устаревшее приложение, которое внезапно стало важным.Это должно быть быстрее.Существует множество фрагментов кода, которые могут быть использованы для параллельной обработки, например, распаковка больших файлов и загрузка нескольких файлов вместо одного за раз.Он также обрабатывает файлы данных, и я думаю, что это может быть сделано с потоком на файл, но у меня были проблемы с этим.
Я вижу два возможных решения.
Решение 1) Создайте задачу для каждого _файла в FilesToProcess и используйте Task.Run (Tasks.ToArray ()).
Решение 2) Добавьте дескриптор к основному приложению, в котором указан параметр строки, и передайте _fileToProcess.Затем обработайте файл как обычно.При таком подходе я просто запускаю новый процесс существующего приложения для обработки одного файла, но я запускаю столько, сколько мне нужно.
Мой код не является потокобезопасным.Должен ли я действительно переписать код, чтобы все мои подпроцессы были синхронизированы или находились в любой проблемной области IE MethodCall1, проходящей byref?Есть ли более простое решение?
Если это так, то решение 2 кажется гораздо более простым, даже при потере прозрачности.
Ниже приведен пример написания псевдокода.
Public Sub Main()
Dim Foo, Bar
Dim FilesToProcess = DownloadFiles()
For Each _file as string in FilesToProcess
UnzipFile(_file)
MethodCall1(Foo,Bar)
MethodCall2SqlIdentityInsert()
MethodCall2SqlUpdate()
Next
End Sub
Public Sub MethodCall1(ByRef Foo, ByRef Bar)
Foo = Something
bar = SomethingElse
End Sub
Псевдокод Sol1
Public Sub Main()
Dim tasks As List(Of Task) = New List(Of Task)()
Dim FilesToProcess = DownloadFiles()
For Each _file as string in FilesToProcess
tasks.Add(Task.RunSub()
Dim Foo, Bar
UnzipFile(_file)
MethodCall1(Foo,Bar)
MethodCall2SqlIdentityInsert()
MethodCall2SqlUpdate()
End Sub)
Next
Task.WaitAll(tasks.ToArray())
End Sub
Public Sub MethodCall1(ByRef Foo, ByRef Bar)
Foo = Something
bar = SomethingElse
End Sub