首页 > 解决方案 > 没有 GA/GC 的千分之一秒字符串的最佳获取

问题描述

作为计时器,我如何在不分配任何垃圾的情况下进行千分之一秒的读数?

我知道可以为 0.999 构建一个从 000 到 999 的字符串数组,并从thousandthsArray[nnn]

但是,如何从每个时间报告,每个帧中将其划分出来,而不会在划分秒数的过程中产生垃圾。

例如。当前时间是 14.397

我需要在不产生任何垃圾的情况下将 397 从 14 秒中分离出来。

但是数学函数似乎每帧都会产生一些垃圾。我能想到的没有什么是特别优化的。甚至工作。

标签: c#unity3dmathgarbage

解决方案


如果不产生任何垃圾,我认为这是不可能的。你应该尽量少去。

您可以使用Mathf.Floorwhich 将其四舍五入到最后int,使其“忘记”任何小数,然后从原始值中减去它,例如

float time = 14.6978f;

float fullSeconds = Mathf.Floor(time);
// = 14 (rounded down)

int thousandthOfSeconds = Mathf.RoundToInt((time - fullSeconds) * 1000); 
// = 698 (rounded up)

这至少比在那里处理任何字符串便宜得多。


推荐阅读