没有 GA/GC 的千分之一秒字符串的最佳获取
Optimal get of thousandths of a second String without GA/GC
如何在不分配任何垃圾的情况下读取千分之一秒的读数,作为计时器?
我知道可以构建一个字符串数组,从 000 到 999 为 0.999,并为 each/any 千分之一秒场景从 thousandthsArray[nnn]
但是,如何从每个时间报告,每个帧中划分出来,而不在划分秒的过程中产生垃圾。
例如。当前时间是 14.397
我需要在不产生任何垃圾的情况下从 14 秒中分离出 397。
但是数学函数似乎每一帧都会产生一些垃圾。我能想到的都不是特别理想的。甚至工作。
如果不创建 any 垃圾,我认为这是不可能的。你应该尽可能少。
您可以使用 Mathf.Floor
将其四舍五入到最后一个 int
使其成为 "forget" 任何小数,然后从原始值中减去它,例如
float time = 14.6978f;
float fullSeconds = Mathf.Floor(time);
// = 14 (rounded down)
int thousandthOfSeconds = Mathf.RoundToInt((time - fullSeconds) * 1000);
// = 698 (rounded up)
这至少比处理那里的任何字符串便宜得多。
有多种清理非托管资源的方法:
实现IDisposable接口和Dispose方法
'using' 块还用于清理非托管资源
有几种方法可以实现 Dispose 方法:
Implement Dispose using 'SafeHandle' Class(它是内置抽象class,具有'CriticalFinalizerObject'和'IDisposable'接口已实现)
Object.Finalize 要覆盖的方法(此方法是特定对象在销毁之前使用的干净的非托管资源)
让我们看看下面的代码来处理非托管资源:
使用 'SafeHandle' Class:
实施 Dispose
如何在不分配任何垃圾的情况下读取千分之一秒的读数,作为计时器?
我知道可以构建一个字符串数组,从 000 到 999 为 0.999,并为 each/any 千分之一秒场景从 thousandthsArray[nnn]
但是,如何从每个时间报告,每个帧中划分出来,而不在划分秒的过程中产生垃圾。
例如。当前时间是 14.397
我需要在不产生任何垃圾的情况下从 14 秒中分离出 397。
但是数学函数似乎每一帧都会产生一些垃圾。我能想到的都不是特别理想的。甚至工作。
如果不创建 any 垃圾,我认为这是不可能的。你应该尽可能少。
您可以使用 Mathf.Floor
将其四舍五入到最后一个 int
使其成为 "forget" 任何小数,然后从原始值中减去它,例如
float time = 14.6978f;
float fullSeconds = Mathf.Floor(time);
// = 14 (rounded down)
int thousandthOfSeconds = Mathf.RoundToInt((time - fullSeconds) * 1000);
// = 698 (rounded up)
这至少比处理那里的任何字符串便宜得多。
有多种清理非托管资源的方法:
实现IDisposable接口和Dispose方法 'using' 块还用于清理非托管资源 有几种方法可以实现 Dispose 方法:
Implement Dispose using 'SafeHandle' Class(它是内置抽象class,具有'CriticalFinalizerObject'和'IDisposable'接口已实现) Object.Finalize 要覆盖的方法(此方法是特定对象在销毁之前使用的干净的非托管资源) 让我们看看下面的代码来处理非托管资源:
使用 'SafeHandle' Class:
实施 Dispose