Многопоточность и запись в файл - C#
Формулировка задачи:
Здравствуйте. Мне нужно создать файл и записать в него информацию, для этого нужно использовать многопоточность.
Много читал здесь на форуме, и не только здесь(но все равно плохо понял), получился такой код.
И метот WriteBytes:
Если я правильно понимаю, замок блокирует StreamToRead когда к нему обращается первый Thread, и этот первый Thread в итоге не отпускает его до "победного". После этого доступ получает второй поток, и делает абсолютно то же самое что и первый, тем самым дублируя работу, а не выполняя ее паралельно. Так ли это? Или я что-то не правильно понимаю.
using (FileStream orignialFileStream = File.OpenRead(sourceFileName)) using (FileStream finalFileStream = File.Create(finalFileName)) { Thread[] threads = new Thread[threadsCount]; for (int i = 0; i < threadsCount; i++) { threads[i] = new Thread(() => WriteBytes(orignialFileStream, finalFileStream)); } foreach (Thread t in threads) { t.Start(); } }
private void WriteBytes(Stream streamToRead, Stream streamToWrite) { lock (loker) { byte[] buffer = new byte[bufferSize]; int nRead = 0; while ((nRead = streamToRead.Read(buffer, 0, buffer.Length)) > 0) { streamToWrite.Write(buffer, 0, nRead); } } }
Решение задачи: «Многопоточность и запись в файл»
textual
Листинг программы
private void ReadFile() { using (FileStream fileStream = new FileStream(sourceFileInfo.FullName, FileMode.Open, FileAccess.Read)) { blockManager.CreateDataBlocksFromStream(fileStream); } } private void WriteFile() { using (FileStream fileStream = new FileStream(newFileInfo.Name, FileMode.Create, FileAccess.Write)) using (GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Compress)) { blockManager.WriteDataBlocksToFile(gzipStream); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д