我想在一帧内获取某个方法的总执行时间。开始想用Time.time减去之前保存的时间。但是发现在一帧内永远返回的是0,多帧的话可以,看来Time.time只会在每一帧赋值更新一次,所以一帧内的就取不到了。
然后查了一下c#有一个Stopwatch的类可以帮我们记录时间,使用起来也挺便利的。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using UnityEngine; using System.Collections; using System.Diagnostics; public class NewBehaviourScript : MonoBehaviour { void Start () { float t = Time.time; TestMethod(); UnityEngine.Debug.Log(string.Format("total: {0} ms",Time.time - t)); Stopwatch sw = new Stopwatch(); sw.Start(); TestMethod(); sw.Stop(); UnityEngine.Debug.Log(string.Format("total: {0} ms",sw.ElapsedMilliseconds)); Profiler.BeginSample("TestMethod"); TestMethod(); Profiler.EndSample(); } void TestMethod() { for(int i =0; i < 10000000; i++) { } } } |
如下图所示,Stopwatch就可以正确的取到上一个方法所消耗的时间。如果想同时测试多个方法,可以多次调用 sw.Reset(); 然后sw.Stop取ElapsedMilliseconds毫秒数即可。
当然也可以用 Profiler.BeginSample 和 Profiler.EndSample 但是就是要打开Profiler界面找到那一帧就可以看了。
- 本文固定链接: https://www.xuanyusong.com/archives/4184
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
为啥子我在profile下面没有找到方法的监控哦。。。。
HI momo ~~你们对某个方法的消耗时间有评估吗? 比如某个方法长于多少时间就会考虑去优化?
这个不好说啊。 执行一次的 比如初始化方法 和执行多次的在Update里的方法 衡量标准不一样。。总之 尽可能的去优化。。
Debug.Log 这玩意本身耗时不少
对。 要IO操作嘛。。 所以发布的包一定要把这个去掉了。
Nice,之前只知道 U3D的Profiler.BeginSample不知道C#的Stopwatch
问下MOMO,知道生成出来的AssetBundle怎么加密吗?让别人无法破解。
assetbundl 转成byte[]然后对字节数组加密在存成2进制文件 。 load的时候在去解密这个二进制文件,byte数组在读取 就可以起到assetbundl解密
用rsa加密的可行性如何?
xxtea