我们在使用字符拼接的时候,一般都说需要用到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实现相关推荐

  1. Unity下如何实现RTMP或RTSP流播放和录制

    技术背景 在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程: 通过Native RTSP或RTSP直播播放SDK回 ...

  2. C#高性能低GC 非托管动态扩容数组

    开始之前 相比固定长度的Array,大家可能在编程的时候经常会使用List<T>,同时可能会经常往里面Add东西,因为List具有可扩容性,但是注重GC的朋友会发现(比如Unity开发者) ...

  3. Windows平台实现Unity下窗体|摄像头|屏幕采集推送

    技术背景 随着Unity3D的应用范围越来越广,越来越多的行业开始基于Unity3D开发产品,如传统行业中虚拟仿真教育.航空工业.室内设计.城市规划.工业仿真等领域. 基于此,好多开发者苦于在Unit ...

  4. unity下图灵机器人的使用

    unity下图灵机器人的使用 这里json的解析与建立使用的是LitJson.dll 一.机器人建立 首先到图灵机器人的官网http://www.tuling123.com/注册一个号并建立机器人(有 ...

  5. Unity下计步器Pedometer算法的实现

    Unity下计步器Pedometer的实现 1.环境 unity2018,Android(小米5) 2.原理 加速度传感器的计步算法Pedometer 3.实现 注释写的很清楚了应该 using Un ...

  6. Unity 游戏的String interning优化

    原文链接:http://blog.uwa4d.com/archives/USparkle_String-interning.html 我们通常难以注意到运行着的Unity引擎内String的实例化情况 ...

  7. Unity下的UDP客户端

    Unity下简洁有效的UDP客户端 前言 代码 资源 其他 中文乱码问题 前言 本来就想从网上找一个Unity的UDP客户端,百度上试了好多教程,问题百出,让人气不打一处来. 就几行代码的事情,浪费时 ...

  8. java是如何实现原语的_Java中的低GC:使用原语而不是包装器

    java是如何实现原语的 总览 有两个很好的理由在可能的地方使用原语而不是包装器. 明晰. 通过使用原语,您可以清楚地知道null值是不合适的. 性能. 使用原语通常更快. 清晰度通常比性能更重要,并 ...

  9. Java中的低GC:使用原语而不是包装器

    总览 有两个很好的理由在可能的地方使用原语而不是包装器. 明晰. 通过使用原语,您可以清楚地知道null值是不合适的. 性能. 使用原语通常更快. 清晰度通常比性能更重要,并且是使用它们的最佳理由. ...

最新文章

  1. [POI2007]ZAP-Queries
  2. 碾压专业机构,27 岁华裔小伙推出美国最准新冠预测模型
  3. 蚂蚁金服开源自动化测试框架 SOFAACTS
  4. TPC-H生成Spark测试用的伪数据集(转载)
  5. BZOJ4573:[ZJOI2016]大森林——题解
  6. netflix_学习Netflix管理员–第1部分
  7. QImage与Mat之间的相互转换
  8. C++笔记-const与mutable、static_cast与reinterpret_cast
  9. 元素“Button”不是已知元素。原因可能是网站中存在编译错误,或者缺少web.config文件...
  10. Oracle补历史数据存储过程,Oracle数据库数据丢失恢复的几种方法总结
  11. 计算机网络的非性能特征PPT,计算机网络概述课件课件.ppt
  12. java 删除zip文件_Java--字节缓冲流的效率有多高?测试一下
  13. 消息队列kafka知识总结
  14. echarts 柱状图+折线图
  15. 天猫整站(简易版)SSM(十四)需要登录才能使用的功能
  16. 沪深300ETF基金与其业绩比较基准差别的原因
  17. edge浏览器,无法继续下载,提示检测到病毒的问题
  18. android中AudioRecord使用详解
  19. RTKLIB基础函数等
  20. 2021年高考成绩查询湖南电信,湖南省通信管理局关于开展2021年全省电信网码号资源年报和检查工作的通知...

热门文章

  1. STC8H8K64U——点亮单个数码管
  2. 《密室逃生》将映 六人密室游戏成搏命赌局
  3. 基于PIL将图片由白底转透明
  4. 如何一步让你图像分类达到90%以上精准度
  5. 计算机保研价值洼地院校大盘点(上)
  6. Grizzly:Java NIO框架
  7. 工信部整治平台网址屏蔽问题,打击互联网行业垄断任重道远
  8. 10 – 音效的添加
  9. mamp mysql启动失败_MAMP pro mysql 启动失败
  10. JavaScript之网页页面上实现自动点击