美文网首页
频繁调用getpixels 增大mono内存

频繁调用getpixels 增大mono内存

作者: LosJun | 来源:发表于2019-10-10 11:48 被阅读0次
哇 好久不写了 发现坚持写点东西真的有点难

  最近发现一个问题,在写一些接口的时候 有频繁从图片里面扣一块一块的小图 代码大概是这么写的

var pixels = tex.getPixels(x, y, width, height);
var tex = new Tex2D(...);
tex.SetPixels(x2, y2, width2, height2, pixels);
tex.Apply();

  那我的关注点在于new 出来的图片的内存大小,但是我忽略了频繁操作对于 pixels 在mono堆上分配的内存。测了一下 发现mono被撑大到300多m 真可怕。。

所以写这篇文章 是想说一下解决这个问题的思路

  1.那你频繁分配,那我做缓存好了嘛。于是产生了18个大大小小不一致的 Color数组 嗯 看了一下 挺大的 。
  2.那我自己实现getpixels 呗,不用你native的自己扣了,想了一下还是没办法避免在mono上不分配内存
  3.我使用最大的1024*1024的 color数组,看你native代码抛异常么,(这个时候就无比想念c++的指针),结果发现可行,实际上处理也应该就是自己截取了需要的部分。毕竟不需要的数据,后者不取截断即可。

var pixels = new Color[1024 * 1024]; //缓存下来
var tex = new Tex2D(...);
tex.SetPixels(x2, y2, width2, height2, pixels);
tex.Apply();
总结一下

  我没有跑真机测,editor下看 一个1024 * 1024 的color数组 mono内存会大15MB左右,emm确实很大 但是已经可以达到我的目标需求了,可以进一步优化。
  之前弄recast导航相关的c++接口的时候,也遇到过从c#传递数组到c++类似的一些问题,实际上也是把数组首地址传过去了(我比较懒,没有深入分析),之前遇到传结构体的问题还是没改好,内存布局不一致不太好解决,后来想,好像确实没有什么库的接口是传结构体的吧(参考fmod),我也就大概看了一眼,毕竟不是特别感兴趣 哈哈哈

相关文章

  • 频繁调用getpixels 增大mono内存

    哇 好久不写了 发现坚持写点东西真的有点难   最近发现一个问题,在写一些接口的时候 有频繁从图片里面扣一块一块的...

  • 关于函数式声明的简单使用

    函数式声明的使用,使用inline函数的原因是:函数类型在调用的时候会生成一个对象,频繁调用会增大内存的开销

  • GC与性能,与mem

    当没有gc时,一般存在其他瓶颈,单纯增大内存未必有效。 但是当gc频繁时,full gc较多时,增大内存,一般有效!

  • Mono GC

    什么是Mono内存对于目前绝大多数基于Unity引擎开发的项目而言,其托管堆内存是由Mono分配和管理的。“托管”...

  • Unity性能优化1 2 3

    堆内存优化 就目前Unity所使用的Mono版本而言,Mono堆内存分配特点是,一旦分配,就不会返还给系统,无论堆...

  • Unity Mono托管内存优化

    引子 优化Mono的托管内存Mono的托管内存的优化主要是代码的优化,以下部分是我在网上收集的资料: 内容 1.尽...

  • 内存管理之Mono内存

    这是我在《Unity游戏优化 (第2版)》看的,记录一下~ 内存效率是性能优化的一个重要元素 有啥问题呢?不必要的...

  • lab5: lazy copy

    通常,用户程序使用 sbrk 进行内存扩容,这里存在两个问题 用户频繁调用 sbrk,如果每次都进行内存分配,耗费...

  • 内存优化(4)

    # mono模式下的gameobject 创建与加载monobehavier以后,内存中有大量这种东西,内存中是没...

  • Mono 自动内存管理

    https://blog.csdn.net/jinzhuojun/article/details/9292467 ...

网友评论

      本文标题:频繁调用getpixels 增大mono内存

      本文链接:https://www.haomeiwen.com/subject/xipopctx.html