Многопоточность и запись в файл - 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д