gpt4 book ai didi

c# - System.Threading.Timer卡住计算机

转载 作者:行者123 更新时间:2023-12-03 17:46:46 26 4
gpt4 key购买 nike

我正在创建游戏,并且具有寻路功能,该功能大约需要100毫秒。我有5个敌人,每个都在构造函数中具有此功能:

newPath = new System.Threading.Timer((e) => {
getNewPath(); //The function that takes ~100 ms
}, null, 0, 5000);

现在,我在程序的较早位置使用System.Threading.Timer(每50毫秒运行一次,仅用于步进功能,更新位置等)。那可以正常工作,但是如果我运行此功能(别忘了我有5个敌人,那么它每5秒运行5次),我的整个计算机就会死机。现在,我没有一台笨拙的计算机(虽然不是最好的计算机,但是对于我使用它的目的来说,它已经足够了),所以我不知道问题出在哪里。即使所有计时器都一个接一个地运行(它们不应该这样做,应该同时运行),它最多也要花费500毫秒(或半秒),但是这完全杀死了我的计算机鼠标不动的地方,我无法按Ctrl-Alt-Del组合键,我只需要按住电源按钮直到它关闭即可。

我测试了将简单的打印函数代替getNewPath()的方法,它可以完美运行且符合预期,因此我真的不知道问题出在哪里。

我的问题是:
  • 是什么导致我的电脑锁定到必须按住电源按钮的程度。
  • 除了System.Threading.Timer之外,我还可以使用其他一些东西给我想要的结果而不会完全杀死我的计算机吗? (由于它是MMO,并且能够一次运行多达20次此功能,因此它可能需要成百上千个敌人来进行寻路更新)。

  • 谢谢!

    最佳答案

    如果不知道getNewPath()中的代码,就不可能猜出原因。很难相信,仅是一种简单的A *路径查找算法

    以下是开始调查的一些要点

  • 停止之前的CPU使用率是多少?发生率是多少?哪个过程的发生率最高?
  • 磁盘,网络,内存使用率是多少?
  • 除了上述内容之外,getNewPath是否还会消耗其他资源?
  • 您可以打印5条消息。但是它们是在getNewPath
  • 之前/之后/之后打印的吗?
  • 您有getNewPath的源代码吗?您可以在getNewPath中修改代码吗?
  • getNewPath线程安全吗?它会创建更多线程吗?

  • 可能还有更多要看的东西。但是这些应该足以让您入门。它们是任何人提供有意义建议的必要条件。

    关于c# - System.Threading.Timer卡住计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058252/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com