- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 C# 程序可以跟踪玩家在游戏中的位置。在这个程序中,我有一个名为 Waypoint (X, Y, Z) 的类,它表示游戏 map 上的一个位置。在我产生的其中一个线程中,我不断检查玩家与某个目标 Waypoint 的距离,在 while(true) 循环中一个接一个地快速检查。在 Waypoint 类中有一个名为 public double Distance(Waypoint wp) 的方法,它计算从当前路点到作为参数传递的路点的距离。
问题:每次我想检查玩家到目标航点的距离时,是否可以为玩家的位置创建一个新的航点?然后程序可能会在 while(true) 循环中一遍又一遍地创建这个播放器 Waypoint,只是为了计算距离。
PS:我的程序可能需要巧妙地使用资源,因为它正在运行多个线程和连续的 while 循环来完成各种工作,例如将玩家的 X、Y、Z 位置发布到 UI。
非常感谢!
最佳答案
其他答案的意思是:
- 也许您应该创建堆栈本地实例,因为它不应该花费太多,并且
- 也许您不应该这样做,因为内存分配的成本很高。
这些是猜测 - 有根据的猜测 - 但仍然是猜测。
您是唯一可以回答这个问题的人,通过实际发现(而不是猜测)这些新闻是否占用了足够大的挂钟时间百分比值得担心。
我(和许多其他人)用来回答这类问题的方法是 random pausing .
这个想法很简单。假设这些消息,如果以某种方式消除,将节省——选择一个百分比,比如 20%——的时间。这意味着,如果您只是简单地按下暂停按钮并显示调用堆栈,您至少有 20% 的机会实时捕捉到它。因此,如果你这样做 20 次,你会看到它大约做了 4 次,或多或少。
如果你这样做,你会看到什么占了时间。
- 如果是新闻,你会看到的。
- 如果是别的东西,你会看到的。
你不会确切知道它的成本是多少,但你不需要知道。
您需要知道的是问题所在,而这正是它告诉您的内容。
已添加:如果您愿意解释这种性能调整如何进行,下面是一个假设情况的说明:
当你对堆栈进行采样时,你可能会发现许多可以改进的地方,其中之一可能是内存分配,甚至可能不会很大,因为在这种情况下它是 (C) 只占 14% .它告诉您其他事情花费了更多时间,即 (A)。
因此,如果您修复 (A),您将获得 1.67 倍的加速因子。不错。
现在,如果您重复该过程,它会告诉您 (B) 会为您节省很多时间。因此,您修复它并(在本示例中)获得另一个 1.67 倍,整体加速为 2.78 倍。
现在你再做一次,你会发现原来你怀疑的事情,内存分配,确实占了很大一部分时间。所以你修复它并(在这个例子中)得到另一个 1.67 倍,整体加速为 4.63 倍。现在这是严重的加速。
所以重点是 1) 对要加速的内容保持开放的心态 - 让诊断告诉您要修复的内容,以及 2) 重复该过程以进行多次加速。这就是您获得真正加速的方式,因为当您修剪掉其他内容时,开始时很小的内容会变得更加重要。
关于c# - 高度频繁地创建类的短期新实例是否效率低下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429291/
我是一名优秀的程序员,十分优秀!