Вы почти наверняка не хотите, чтобы делали это несколькими потоками - вы будете связаны с вводом-выводом, и вам не нужны служебные данные диска, ищущие повсюду.
Я бы просто сделал это в один поток:
- Открыть файл 1 для чтения
- Найти
- Открыть файл 2 для записи
- Поиск
- Повторное копирование буфера за раз (например, 32 КБ) из одного потока в другой.
Вы можете обнаружить, что некоторые из FileOptions
(например, SequentialScan
для читателя) может иметь значение.
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, может стоить использовать два потока - один для чтения и один для записиособенно если вы используете два отдельных диска.Тем не менее, также возможно, что операционная система автоматически выполняет предварительную выборку и т. Д., Что не поможет. конечно усложнит код.
У вас есть целевое время для этой операции?Насколько быстро выполняется реализация simple по сравнению с этим целевым временем?Я определенно не буду рисковать несколькими потоками или асинхронными операциями, пока вы не определите, сколько времени займет простой подход.