Unity中的string gc优化
在项目中如果有大量的字符串拼接,比如每秒执行的倒计时,协议中的日志输出,每次拼接会产生大量的gc,尤其是在ILRuntime下执行 gc alloc的次数会更加频繁。
zstring
有两个字符串处理的库都叫zstring,其中小写的zstring是一款国人开源的zstring,而大写的ZString是日本的CySharp公司的
国人的zstring:https://github.com/871041532/zstring
ZString:https://github.com/Cysharp/ZString
经测试zstring在update中是0gc,而ZString还有gc,短字符串处理,会比原生string慢一些,我的测试环境:Unity2019.3.4f1
gc分配值:string >ZString >zstring
执行耗时:zstring >ZString >string
易用性:string>zstring>ZString
测试代码
void Update()
{
Profiler.BeginSample("zstring=============concat");
ZString.Concat("abc", 1);
Profiler.EndSample();
Profiler.BeginSample("string=============concat");
string.Concat("abc", 1);
Profiler.EndSample();
Profiler.BeginSample("cn-zstring=============concat");
using (zstring.Block())
{
zstring.Concat("abc",1);
}
Profiler.EndSample();
Profiler.BeginSample("zstring=============format");
ZString.Format("hello,{0}",1111);
Profiler.EndSample();
Profiler.BeginSample("string=============format");
string.Format("hello,{0}",1111);
Profiler.EndSample();
Profiler.BeginSample("cn-zstring=============format");
using (zstring.Block())
{
zstring.Format("hello ,{0}",1111);
}
Profiler.EndSample();
}
ZString和string gc对比
| Method | Allocated(B) | Mean(ns) | Mean(ns) | |||
|---|---|---|---|---|---|---|
| StringPlus | 224 | 126.66 | 126.66 | |||
| ZStringConcat | 56 | 96.95 | 96.95 | |||
| StringFormat | 128 | 158.21 | 158.21 | |||
| ZStringFormat | 56 | 185.36 | 185.36 | |||
| StringBuilder | 296 | 144.2 | 144.2 | |||
| ZStringBuilder | 56 | 131.68 | 131.68 |
结论
个人而言更倾向于使用国人开发的zstring,它只有一个代码文件,放Plugins目录下就可以使用,相对而言上手更容易
Unity的建议
关于内存管理可看这篇: https://docs.unity3d.com/cn/current/Manual/UnderstandingAutomaticMemoryManagement.html
其中有条建议,对于需要频繁拼接的字符串,先判断字符串是否有变化,无变化则不需要拼接
对于字符串的拼接,使用stringbuilder代替string,同时我也建议使用zstring代替string的+=
对于参数的传递,可以传入引用类型,就不需要每次都构建一个新的对象
Unity中的string gc优化的更多相关文章
- Unity中的GC以及优化
[简介] 常见的 Unity GC 知识点总结出来的思维导图 Unity 官方文档,正巧在博客园发现了已经有位大神(zblade)把原文翻译出来了,而且质量很高~,译文地址 在这里.下面我就可耻地把译 ...
- 浅谈Unity中的GC以及优化
介绍: 在游戏运行的时候,数据主要存储在内存中,当游戏的数据不在需要的时候,存储当前数据的内存就可以被回收再次使用.内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使 ...
- Unity下XLua方案的各值类型GC优化深度剖析
转自:http://gad.qq.com/article/detail/25645 前言 Unity下的C#GC Alloc(下面简称gc)是个大问题,而嵌入一个动态类型的Lua后,它们之间的交互很容 ...
- 关于Unity中的UGUI优化,你可能遇到这些问题
https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
- 【Unity技巧】Unity中的优化技术
http://blog.csdn.net/candycat1992/article/details/42127811 写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得 ...
- Unity Shader入门精要学习笔记 - 第16章 Unity中的渲染优化技术
转自冯乐乐的 <Unity Shader 入门精要> 移动平台的特点 为了尽可能一处那些隐藏的表面,减少overdraw(即一个像素被绘制多次),PowerVR芯片(通常用于ios设备和某 ...
- Unity中的优化技术
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/candycat1992/article/ ...
- 【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
作者:Williammao, 腾讯移动客户端开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/290.h ...
- Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践
protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的 ...
随机推荐
- PPT 文字太多如何处理
Piti 插件 http://www.piti.fun
- 详解 SSL(二):SSL 证书对网站的好处
在如今谷歌.百度等互联网巨头强制性要求网站 HTTPS 化的情况下, 网站部署 SSL 证书已然成为互联网的发展趋势.而在上一篇< 详解 SSL(一):网址栏的小绿锁有什么意义?>中,我们 ...
- 悟空活动中台 - 基于 WebP 的图片高性能加载方案
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/rSpWorfNTajtqq_pd7H-nw作者:悟空中台研发团队 一.背景 移动端网页的加载 ...
- vue2+高德地图web端开发
https://blog.csdn.net/qq_51553982/article/details/123014412
- 简单实现el-dialog的拖拽功能
首先还是要明确几个概念,这里通过修改css并截图给大家介绍下,理解了这几个概念,代码写起来会得心应手许多. clientWidth,clientHeight scrollWidth,scrollHei ...
- node pressure and pod eviction
0. overview There are too many guides about node pressure and pod eviction, most of them are specifi ...
- latex · markdown | 如何写矩阵和大公式
1 \left[\begin{array}{c} a & b \\ c & d \end{array}\right] 效果: \[\left[\begin{array}{c} a &a ...
- 【动画进阶】神奇的 3D 卡片反光闪烁动效
最近,有群里在群里发了这么一个非常有意思的卡片 Hover 动效,来源于此网站 -- key-drop,效果如下: 非常有意思酷炫的效果.而本文,我们不会完全还原此效果,而是基于此效果,尝试去制作这么 ...
- 基于Html+腾讯云播SDK开发的m3u8播放器
周末业余时间在家无事,学习了一下腾讯的云播放sdk,并制作了一个小demo(m3u8播放器),该在线工具是基于腾讯的云播sdk开发的,云播sdk非常牛,可以支持多种播放格式. 预览地址 m3u8pla ...
- PHP安全之道学习笔记6:密码安全
PHP安全之道:密码安全 最近几年用户数据泄露越发频繁,一些使用PHP技术的大型网站被暴库或者脱库,facebook公司曾因为此类事件股价暴跌.从长远发展来看,用户的数据安全对于网站来说至关重要 ...