Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XNA 3.1的慢速线程_C#_Multithreading_Performance_Xna - Fatal编程技术网

C# XNA 3.1的慢速线程

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

我在XNA中有一个非常奇怪的线程问题。我正在使用Q9400的个人电脑上工作

下面的代码是在XNA的
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毫秒应该没问题。如果这对您来说太慢,您已经提到了答案:使用线程池或降低更新频率。