Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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# 定时冻结计算机_C#_Performance_Crash - Fatal编程技术网

C# 定时冻结计算机

C# 定时冻结计算机,c#,performance,crash,C#,Performance,Crash,我正在创建一个游戏,我有一个寻路功能,大约需要100毫秒。我有5个敌人,每个敌人在Constructor中都有这个功能: newPath = new System.Threading.Timer((e) => { getNewPath(); //The function that takes ~100 ms }, null, 0, 5000); 现在,我在程序的前面一点使用System.Threading.Timer(每50毫秒运行一次,仅用于步进功能、更新位置等)。这一个运行得很好

我正在创建一个游戏,我有一个寻路功能,大约需要100毫秒。我有5个敌人,每个敌人在Constructor中都有这个功能:

newPath = new System.Threading.Timer((e) => {
  getNewPath(); //The function that takes ~100 ms
}, null, 0, 5000);
现在,我在程序的前面一点使用System.Threading.Timer(每50毫秒运行一次,仅用于步进功能、更新位置等)。这一个运行得很好,但是如果我运行这个函数(别忘了我有5个敌人,所以它每5秒运行5次),我的整个计算机就会冻结。现在我没有一台蹩脚的电脑(它不是最好的,但它对我使用它的目的来说非常好),所以我不知道问题出在哪里。即使所有计时器一个接一个地运行(它们不应该这样做,它们应该同时运行),最多需要500毫秒(或半秒),但它会完全杀死我的计算机,以至于我的鼠标无法移动,我无法按住Alt-Del键,我必须按住电源按钮直到它关闭

我测试了用一个简单的print函数来代替getNewPath(),它工作得非常完美,正如预期的那样,所以我真的不知道问题出在哪里

我的问题是:

  • 是什么导致我的电脑锁定到必须按住电源按钮的地步
  • 除了System.Threading.Timer之外,我还可以使用其他工具,在不完全关闭计算机的情况下获得所需的结果吗?(能够一次运行此功能多达20次,因为这是一个MMO,可能有数百个敌人需要对其进行寻路更新)

  • 谢谢

    如果不知道getNewPath()中的代码,甚至无法猜测原因。很难相信这仅仅是一种简单的a*路径查找算法

    以下是开始调查的几点

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

  • 可能还有更多的东西要看。但这些应该足以让你开始。任何人都必须给出有意义的建议。

    如果不在getNewPath中看到代码,可能很难回答。计时器不太可能使计算机变慢,而且getNewPath中的代码很可能是。@hatchet,这是一个简单的a*寻路algorithm@hatchet虽然我不明白为什么代码中的东西会让我的电脑慢那么多。不管怎样,它都需要100毫秒,不是吗?还有,你确定你没有创建一堆这样的计时器并且从不关闭它们吗?这是对这个特定问题的回答还是关于如何调试的一般回答?我也看到了很多问题,更适合作为评论