我们公司有一个Unity原生开发语言C#写的项目,目前已经在安卓测试过多次,上架IOS在考虑热更,所以对ILRuntim进行性能测试,在测试过程中已经按照官方文档进行了CLR绑定和生成Release的Dll,并且在非Editor环境下测试。

我的测试环境:ILRuntime 1.6.3 ,MuMu模拟器和华为手机

50万次的加法运算

ILRuntime使用全局变量:UnitTest_Performance50万 Elapsed time:1050ms, result = 445698416 ,Tick:10527445

ILRuntime使用局部变量:UnitTest_Performance50万 Elapsed time:534ms, result = 445698416 ,Tick:5436060

Unity原生代码:mono UnitTest_Performance50万 Elapsed time:1ms, result = 445698416 ,Tick:19900

xlua中lua:[10:42:43.8636]LUA: cost: 4.00ms

C#测试代码

 public static void UnitTest_Performance3()
{
var before = DateTime.Now.Ticks;
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
int cnt = 0;
for (int i = 0; i < 500000; i++)
{
cnt += i;
}
sw.Stop();
var tick_diff = DateTime.Now.Ticks - before;
Debug.Log(string.Format("UnitTest_Performance50万 Elapsed time:{0:0}ms, result = {1} ,Tick:{2}", sw.ElapsedMilliseconds, cnt,tick_diff));
}

Lua测试代码

local begin = os.clock()
local cnt = 0;
for i = 1, 500000 do
cnt = cnt + i;
end
local diff = os.clock() - begin;
print(string.format("cost:%.2f ms", diff*1000))

从测试结果可以看到在Lua做加法运算的性能会比ILRuntime中好一百倍左右,对于需要大量运算的确实如ILRuntime的文档所以不应该放热更代码中

为什么不测试热更调主工程?

在这个项目中,从热更调用主工程代码,相对比较少,大部分都是在热更工程中使用计算,比如对象管理,战斗部分,玩法逻辑。

从ILRuntime的文档中提到跨域调用会比Lua快很多

空Update也耗时

对于MonoBehaviour中的空Update,当执行上千次时,耗时在0.1ms,所以要去掉空内容的Update

建议

栈和堆差别非常大

上面局部变量和全局变量的耗时差别很大,是因为局部变量是存储在栈中,而全局变量是存储在堆中,一定要注意在进行遍历一个列表时,在方法内先使用local xx = 全局变量,这样对于性能的提升是非常有效的

逻辑运算问题会放大数百倍

如果项目计划使用ILRuntime热更,强烈建议在项目初期就接入,这样能及早发现逻辑代码效率问题,及早解决掉。

一定要仔细阅读官方的文档,避免踩到雷区,比如foreach会产生GC Allow,热更代码中避免频繁大量的计算和空函数调用,对于有很多的空Update也需要去掉

不要使用foreach

在每秒执行的update中使用for会比foreach性能好很多

ILRuntime性能测试的更多相关文章

  1. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  2. 性能测试工具 wrk 安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  3. .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono

    .NET Core 超强性能测试组件BenchmarkDotNet 支持Full .NET Framework, .NET Core (RTM), Mono. BenchmarkDotNet支持 C# ...

  4. C#中实现并发的几种方法的性能测试

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...

  5. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  6. PostgreSql性能测试

    # PostgreSql性能测试 ## 1. 环境+ 版本:9.4.9+ 系统:OS X 10.11.5+ CPU:Core i5 2.7G+ 内存:16G+ 硬盘:256G SSD ## 2. 测试 ...

  7. Web系统性能测试术语简介

    并发用户 并发一般分为两种情况.一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作.这种操作一般指做同一类型的业务,比如在信用卡审批业务中,一定数目的用户在同一时刻对已经完成的审批业务 ...

  8. Web前端性能测试-性能测试知多少---深入分析前端站点的性能

    针对目前接手的web前端的性能,一时间不知道从什么地方入手,然后经过查找资料,发现其实还是蛮简单的. 前端性能测试对象: HTML.CSS.JS.AJAX等前端技术开发的Web页面 影响用户浏览网页速 ...

  9. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

  10. Probe在性能测试中的使用方式简介

    简介: Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具. Lambda Probe 是基于 Web + AJAX 的强大的免 ...

随机推荐

  1. 开启一个 A/B 实验到底有多简单?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 火山引擎 A/B 测试平台 DataTester 孵化于字节跳动业务内部,在字节跳动,"万事皆 A/B, ...

  2. 声明式调用 —— SpringCloud OpenFeign

    Feign 简介 Spring Cloud Feign 是一个 HTTP 请求调用的轻量级框架,可以以 Java 接口注解的方式调用 HTTP 请求,而不用通过封装 HTTP 请求报文的方式直接调用 ...

  3. ChatGpt windows+mac os+linux三平台桌面版下载

    1 前言 ChatGPT这段时间还是挺火的,有不了解的小伙伴可以看看这篇ChatGPT为何打响AI新时代的礼炮,一路火花带闪电[1],能简单的了解: 什么是ChatGPT ChatGPT为什么这么火 ...

  4. GCC 指定运行期动态链接库搜索路径

    链接器 ld 的 -rpath=dir 选项可以指定运行期 so 文件的搜索路径. GCC 的 -Wl,option 选项可以传递选项给链接器 ld. 所以组合起来,可以直接使用 -Wl,-rpath ...

  5. linux 服务器运行jmeter 进行服务性能压测

    本文为博主原创,转载请注明出处: 起初需要了解项目服务的性能和瓶颈,就想要用 jmeter 进行压测,刚开始都是启动本地的jmeter 压测服务器上项目服务的性能,发现服务器的 cpu 和内存等一直升 ...

  6. jmap 查看jvm内存大小并进行dump文件内存分析

    本文为博主原创,未经允许不得转载: 1.jmap的使用 Jmap 可以用来查看内存信息,实例个数以及占用内存大小. jmap -histo[:live] 打印每个class的实例数目,内存占用,类全名 ...

  7. 你不知道的JavaScript APIs

    前言 在本文中,将介绍一些鲜为人知但却非常有用的API,如: Page Visibility API Web Share API Broadcast Channel API International ...

  8. IDEA控制台输出中文乱码

    1.问题 如下图,我使用的文件编码格式为UFT-8,这里会出现中文乱码的问题. 且我并不方便直接修改全局文件编码格式,有可能会造成未知错误. 2.解决 参考链接:IDEA 控制台中文乱码 4 种解决方 ...

  9. CSS - 滤镜的妙用 - 制作炫彩圆环(外加动画)

    效果图如下: 话不多说,上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  10. Go-快速排序

    package main import "fmt" // 快速排序 // 特征: // 1. 选定一个数,让这个数左边的比这个数小,右边比这个数大 // 2. 然后这个基数就是已经 ...