XNAでのスレッド化に関してかなり奇妙な問題があります。Q9400を搭載したPCで作業しています。
以下のコードはUpdate()
、XNAの機能で起動されます。
Stopwatch sw = new Stopwatch();
Thread[] threads = new Thread[2];
threads[0] = new Thread(() => Thread_UpdateDoodadsMovable(gameTime));
threads[1] = new Thread(() => Thread_UpdateDoodadsRotated(gameTime));
sw.Start();
foreach (Thread t in threads)
{
t.Start();
}
foreach (Thread t in threads)
{
t.Join();
}
sw.Stop();
Console.WriteLine("A " + sw.ElapsedTicks);
sw.Reset();
コードにコメントが付けられているため、両方のスレッドが「空」になっています。
public void Thread_UpdateDoodadsRotated(GameTime gametime)
{
// level.UpdateDoodadsRotated(gameTime);
}
public void Thread_UpdateDoodadsMovable(GameTime gametime)
{
// level.UpdateDoodadsMovable(gametime);
}
7000から10000までのsw.ElapsedTicks
リターン。誰かが私にこれが起こっている理由を説明できますか?
ThreadPool
スレッドを取得するのではなく作成することがパフォーマンスの面で最善の方法ではないことを私は知っていますが、スレッドの作成はElapsedTicks
戻るよりもはるかに短い時間で済みます。