不使用GA / GC的情况下,千分之一秒字符串的最佳获取

时间:2019-05-24 06:07:53

标签: c# unity3d math garbage

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

我知道,可以从thousandthsArray[nnn]

但是,如何在每个时间报告,每个帧中进行划分,而又不会在划分秒数的过程中产生垃圾。

例如当前时间是14.397

我需要在不造成任何垃圾的情况下从14秒中分离出397。

但是数学函数似乎在每一帧中都会产生一点垃圾。我能想到的没有什么是最佳选择。甚至工作。

2 个答案:

答案 0 :(得分:3)

我认为,如果不创建任何垃圾,这是不可能的。您应该尽可能少地去参加。

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

float time = 14.6978f;

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

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

至少比在此处理任何字符串便宜。

答案 1 :(得分:0)

有多种清除非托管资源的方法:

实现IDisposable接口和Dispose方法 “使用”块还用于清除非托管资源 有两种方法可以实现Dispose方法:

使用“ SafeHandle”类实现处置(它是内置的抽象类,具有“ CriticalFinalizerObject”和“ IDisposable”接口) 要重写的Object.Finalize方法(此方法是销毁特定对象之前使用的干净非托管资源) 让我们看下面的代码来处理非托管资源:

使用“ SafeHandle”类实施处置: