ZString-unity下的string低gc实现
我们在使用字符拼接的时候,一般都说需要用到string.format或者stringbuilder的append来实现。
首先string的拼接是会有gc的,从android端截取的数据可以看出来,
上面的string.concat是字符串直接拼接
下面的是string.format的小号会比上面的小一点,但还是有128b。
然后我们来看看stringbuilder,如果stringbuilder.append一个int类型的话也是会产生一些gc的
append的gc倒还好,但是我们最终还是要用到字符串,所以tostring的消耗就有点大了。
下面介绍一个叫ZString的字符串拼接方式。
地址如下:https://medium.com/@neuecc/zstring-zero-allocation-stringbuilder-for-net-core-and-unity-f3163c88c887
他有
ZString.Concat(“x:”, x, ” y:”, y, ” z:”, z)
ZString.Format(“x:{0} y:{1} z:{2}”, x, y, z)
ZString.CreateStringBuilder(), Append(), .ToString()
这三种方式拼接,gc也是相对少的,来看看他在手机上的gc:
可以看到比上面两个方法少。
他的实现原理是申请在托管堆外的内存,然后用Span 的方式拼接字符串,以前我们只能用unsafe的方式访问托管堆外的内容。现在可以用span的方式做了。
也就是说拼接的过程完全不会使用托管堆来处理,减少了托管堆的gc的可能性。所以他在拼接过程是肯定完全没有gc的。
那么为什么他还会有40个gc左右呢?
这是因为最终我们需要展示成string,那么还是需要new出一个string来装载我们在非托管堆的buffer,
所以会有这个gc。
整体来说还是比之前优化了不少的。手机上亲测可以用。
https://github.com/Cysharp/ZString
最后附上官方的数据
ZString-unity下的string低gc实现相关推荐
- Unity下如何实现RTMP或RTSP流播放和录制
技术背景 在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程: 通过Native RTSP或RTSP直播播放SDK回 ...
- C#高性能低GC 非托管动态扩容数组
开始之前 相比固定长度的Array,大家可能在编程的时候经常会使用List<T>,同时可能会经常往里面Add东西,因为List具有可扩容性,但是注重GC的朋友会发现(比如Unity开发者) ...
- Windows平台实现Unity下窗体|摄像头|屏幕采集推送
技术背景 随着Unity3D的应用范围越来越广,越来越多的行业开始基于Unity3D开发产品,如传统行业中虚拟仿真教育.航空工业.室内设计.城市规划.工业仿真等领域. 基于此,好多开发者苦于在Unit ...
- unity下图灵机器人的使用
unity下图灵机器人的使用 这里json的解析与建立使用的是LitJson.dll 一.机器人建立 首先到图灵机器人的官网http://www.tuling123.com/注册一个号并建立机器人(有 ...
- Unity下计步器Pedometer算法的实现
Unity下计步器Pedometer的实现 1.环境 unity2018,Android(小米5) 2.原理 加速度传感器的计步算法Pedometer 3.实现 注释写的很清楚了应该 using Un ...
- Unity 游戏的String interning优化
原文链接:http://blog.uwa4d.com/archives/USparkle_String-interning.html 我们通常难以注意到运行着的Unity引擎内String的实例化情况 ...
- Unity下的UDP客户端
Unity下简洁有效的UDP客户端 前言 代码 资源 其他 中文乱码问题 前言 本来就想从网上找一个Unity的UDP客户端,百度上试了好多教程,问题百出,让人气不打一处来. 就几行代码的事情,浪费时 ...
- java是如何实现原语的_Java中的低GC:使用原语而不是包装器
java是如何实现原语的 总览 有两个很好的理由在可能的地方使用原语而不是包装器. 明晰. 通过使用原语,您可以清楚地知道null值是不合适的. 性能. 使用原语通常更快. 清晰度通常比性能更重要,并 ...
- Java中的低GC:使用原语而不是包装器
总览 有两个很好的理由在可能的地方使用原语而不是包装器. 明晰. 通过使用原语,您可以清楚地知道null值是不合适的. 性能. 使用原语通常更快. 清晰度通常比性能更重要,并且是使用它们的最佳理由. ...
最新文章
- [POI2007]ZAP-Queries
- 碾压专业机构,27 岁华裔小伙推出美国最准新冠预测模型
- 蚂蚁金服开源自动化测试框架 SOFAACTS
- TPC-H生成Spark测试用的伪数据集(转载)
- BZOJ4573:[ZJOI2016]大森林——题解
- netflix_学习Netflix管理员–第1部分
- QImage与Mat之间的相互转换
- C++笔记-const与mutable、static_cast与reinterpret_cast
- 元素“Button”不是已知元素。原因可能是网站中存在编译错误,或者缺少web.config文件...
- Oracle补历史数据存储过程,Oracle数据库数据丢失恢复的几种方法总结
- 计算机网络的非性能特征PPT,计算机网络概述课件课件.ppt
- java 删除zip文件_Java--字节缓冲流的效率有多高?测试一下
- 消息队列kafka知识总结
- echarts 柱状图+折线图
- 天猫整站(简易版)SSM(十四)需要登录才能使用的功能
- 沪深300ETF基金与其业绩比较基准差别的原因
- edge浏览器,无法继续下载,提示检测到病毒的问题
- android中AudioRecord使用详解
- RTKLIB基础函数等
- 2021年高考成绩查询湖南电信,湖南省通信管理局关于开展2021年全省电信网码号资源年报和检查工作的通知...