c# – 在XNA中进行线程处理
我在XNA中有一个需要进行网络呼叫的游戏.在更新方法中,我确定需要发送的内容,然后将其添加到要发送的内容列表中.然后我运行网络呼叫.这显然会减慢应用程序的速度.所以我首先尝试在更新中创建这样的新线程,使其在单独的线程上执行:
Thread thread; thread = new Thread( new ThreadStart(DoNetworkThing)); thread.Start(); 我认为创建线程有开销等,这导致这甚至更慢. 那么我做错了什么?这样做的最佳方式是什么? 解决方法
我最初尝试在XNA上使用线程时遇到了这个问题 – 添加一个线程会减慢一切.事实证明线程亲和力是个问题.
在Xbox 360上,默认情况下,所有线程都在同一处理器核心上运行;此行为与Windows不同,后者内核将线程放置到其他内核上. (有关详细信息,请参阅MSDN社交网站this thread上的答案.) 要绕过它,您需要将线程的亲和力设置为线程函数中的另一个核心: void DoNetworkThing() { #ifdef XBOX Thread.SetProcessorAffinity(3); // see note below #endif /* your code goes here */ } Thread thread = new Thread( new ThreadStart(DoNetworkThing)); thread.Start(); Thread.SetProcessorAffinity的文档指出,在XNA上,核心0和2是为框架保留的;核心1和核心3-5免费供您使用.主线程(包含main()函数的线程)将位于核心1.上面的代码任意设置线程在核心3上运行,但您可以选择不同的核心,或添加代码以编程方式选择核心(如果你有多个线程,你可能想要这样做.) 最后,请注意#ifdef后卫 – Thread.SetProcessorAffinity仅在Xbox上可用;它甚至不会在Windows上编译! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |