다음 코드가 있습니다. 여러 스레드에서 파일 생성을 시작하고 싶습니다. 목적은 여러 스레드에서 할 때 10 개의 파일을 만드는 데 시간이 덜 걸린다는 것입니다. 내가 이해할 수 있도록 비동기 호출 요소를 도입해야합니다.멀티 스레딩 및 스피드 업
이 코드 조각을 어떻게 변경해야합니까? 나는 코드의 쓰레드 생성 부분을 언급 단지 루프에서 testMethod 10 번 호출하는 경우
using System;
using System.Text;
using System.Threading;
using System.IO;
using System.Diagnostics;
namespace MultiDemo
{
class MultiDemo
{
public static void Main()
{
var stopWatch = new Stopwatch();
stopWatch.Start();
// Create an instance of the test class.
var ad = new MultiDemo();
//Should create 10 files in a loop.
for (var x = 0; x < 10; x++)
{
var y = x;
int threadId;
var myThread = new Thread(() => TestMethod("outpFile", y, out threadId));
myThread.Start();
myThread.Join();
//TestMethod("outpFile", y, out threadId);
}
stopWatch.Stop();
Console.WriteLine("Seconds Taken:\t{0}",stopWatch.Elapsed.TotalMilliseconds);
}
public static void TestMethod(string fileName, int hifi, out int threadId)
{
fileName = fileName + hifi;
var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
var sw = new StreamWriter(fs, Encoding.UTF8);
for (int x = 0; x < 10000; x++)
{
sw.WriteLine(DateTime.Now.ToString());
}
sw.Close();
threadId = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine("{0}",threadId);
}
}
}
는 지금, 그것은 스레드의 생성을 처리하기 위해 시도하는 여러 스레드보다 빠릅니다.
최상의 병렬 구현이 아니며 동일한 실제 디스크에 IO 제한 쓰기가 계속 될 것입니다. TPL을 사용하면 CPU에 더 적합합니다 (현재 컴퓨터에 더 많은 코어가 있음). 동일한 물리적 디스크의 디스크 입출력은 직렬입니다 (일부 캐싱 있음). – Paparazzi
이미 mutithreaded 파일 복사/생성을 구현 한 vxCopy http://www.vrxtools.com/vxcopy/Default.aspx를 살펴보십시오. 어쩌면 당신은 그것으로부터 약간의 아이디어를 얻을 수 있습니다. – ja72