c# - 没有 GA/GC 的千分之一秒字符串的最佳获取
问题描述
作为计时器,我如何在不分配任何垃圾的情况下进行千分之一秒的读数?
我知道可以为 0.999 构建一个从 000 到 999 的字符串数组,并从thousandthsArray[nnn]
但是,如何从每个时间报告,每个帧中将其划分出来,而不会在划分秒数的过程中产生垃圾。
例如。当前时间是 14.397
我需要在不产生任何垃圾的情况下将 397 从 14 秒中分离出来。
但是数学函数似乎每帧都会产生一些垃圾。我能想到的没有什么是特别优化的。甚至工作。
解决方案
如果不产生任何垃圾,我认为这是不可能的。你应该尽量少去。
您可以使用Mathf.Floor
which 将其四舍五入到最后int
,使其“忘记”任何小数,然后从原始值中减去它,例如
float time = 14.6978f;
float fullSeconds = Mathf.Floor(time);
// = 14 (rounded down)
int thousandthOfSeconds = Mathf.RoundToInt((time - fullSeconds) * 1000);
// = 698 (rounded up)
这至少比在那里处理任何字符串便宜得多。