C# XNA 3.1的慢速线程
我在XNA中有一个非常奇怪的线程问题。我正在使用Q9400的个人电脑上工作 下面的代码是在XNA的C# XNA 3.1的慢速线程,c#,multithreading,performance,xna,C#,Multithreading,Performance,Xna,我在XNA中有一个非常奇怪的线程问题。我正在使用Q9400的个人电脑上工作 下面的代码是在XNA的Update()函数中启动的 Stopwatch sw = new Stopwatch(); Thread[] threads = new Thread[2]; threads[0] = new Thread(() => Thread_UpdateDoodadsMovable(gameTime)); threads[1] = n
Update()
函数中启动的
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);
}
sw.ElapsedTicks
返回的值介于7000到10000之间。有人能给我解释一下为什么会这样吗
我知道创建线程而不是从
ThreadPool
获取线程并不是最佳的执行方式,但是创建线程所花费的时间比ElapsedTicks
返回的时间要少得多。您能将ElapsedTicks
更改为ElapsedTicks
吗?滴答声的持续时间可能会有所不同,可能会下降到100纳秒。那么你的持续时间是0.7到1毫秒,这似乎是合理的。我确实改变了它们,持续时间是2到3毫秒。我用同样的代码做了一个小的控制台应用,时间也差不多。有什么方法可以加快线程速度吗?在所有1秒=1000毫秒、1000/60=16.6毫秒的帧和线程占用的另外2或3秒之后,会产生差异。在代码中的另一个位置查看时间会很有趣:开始之后和连接之前(for循环之间)。通过这种方式,我们可以看到时间是花在安装还是拆卸上。此外,我认为当线程代码被注释掉并且您只是测量设置和拆卸时间时,说“有什么方法可以加快线程速度吗?”是不正确的。您计算的16.6毫秒不是更新方法在一帧内的持续时间。如果Update()
已完成,则它已完成。它将被再次调用,以达到60赫兹或任何频率。3毫秒应该没问题。如果这对您来说太慢,您已经提到了答案:使用线程池或降低更新频率。