C# 定时冻结计算机
我正在创建一个游戏,我有一个寻路功能,大约需要100毫秒。我有5个敌人,每个敌人在Constructor中都有这个功能: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毫秒运行一次,仅用于步进功能、更新位置等)。这一个运行得很好
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(),它工作得非常完美,正如预期的那样,所以我真的不知道问题出在哪里
我的问题是:
谢谢 如果不知道getNewPath()中的代码,甚至无法猜测原因。很难相信这仅仅是一种简单的a*路径查找算法 以下是开始调查的几点
可能还有更多的东西要看。但这些应该足以让你开始。任何人都必须给出有意义的建议。如果不在getNewPath中看到代码,可能很难回答。计时器不太可能使计算机变慢,而且getNewPath中的代码很可能是。@hatchet,这是一个简单的a*寻路algorithm@hatchet虽然我不明白为什么代码中的东西会让我的电脑慢那么多。不管怎样,它都需要100毫秒,不是吗?还有,你确定你没有创建一堆这样的计时器并且从不关闭它们吗?这是对这个特定问题的回答还是关于如何调试的一般回答?我也看到了很多问题,更适合作为评论