Unity中foreach会增加GC

unity中for效率比foreach高?

在unity中使用foreach遍历集合会增加gc alloc,参考的话题:作为Unity3D的脚本而言,c#中for是否真的比foreach效率更高?

foreach造成gc alloc

Unity Mono的foreach造成GC Alloc的BUG与实测

C#遍历集合方法

ToArray

ToArray等于把Dictionary拷贝了一份

使用Linq

Enumerable.ElementAt<TSource>  (IEnumerable<TSource>, Int32)

参考:https://msdn.microsoft.com/zh-cn/library/bb299233%28v=vs.110%29.aspx

方法代码

public static void Main(string[] args)
{
Dictionary<string,string> dictionary =new Dictionary<string, string>();
dictionary["engine1"] = "unity";
dictionary["engine2"] = "cocos"; //方法一
var array = dictionary.ToArray();
for (int idx = ; idx < array.Count(); idx++)
{
var itemKey = array[idx].Key;
var itemValue = array[idx].Value;
Console.Write("key:{0} ,value:{1}\n", itemKey, itemValue);
} //方法二
for (int index = ; index < dictionary.Count; index++)
{
//根据索引获取
var item = dictionary.ElementAt(index);
var itemKey = item.Key;
var itemValue = item.Value;
Console.Write("\nkey:{0} ,value:{1}\n", itemKey, itemValue);
} }

GetEnumerator(Unity推荐使用)

static void Main(string[] args)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("C#", "4.5");
dict.Add("Java", "");
dict.Add("Python", "");
Dictionary<string, string>.Enumerator etor = dict.GetEnumerator();
while (etor.MoveNext())
{
Console.WriteLine("key = {0}, value = {1}",etor.Current.Key, etor.Current.Value);
}
}

Unity减少GC Alloc之 使用for替换foreach的更多相关文章

  1. UNITY 的GC ALLOC到底是什么

    U3D的Profiler中的GC ALLOC 项让人很麻烦,一直搞不清楚它是什么,因为 GC 是垃圾回收,而alloc是内存分配,那么 GC ALLOC 是 垃圾回收内存分配? 这个名字起的太TM烂了 ...

  2. Unity中无GC Alloc的CalculateFrustumPlanes

    如果你需要在逻辑层做一些预先的剔除操作,可能需要从MainCamera构建视锥体,然后进行简易相交测试,这时候在unity里面用到的函数接口是CalculateFrustumPlanes: names ...

  3. Unity优化之GC——合理优化Unity的GC

      转载请标明出处http://www.cnblogs.com/zblade/ 最近有点繁忙,白天干活晚上抽空写点翻译,还要运动,所以翻译工作进行的有点缓慢 =.= PS: 最近重新回来更新了一遍,文 ...

  4. C#可空类型的速度和GC Alloc测试

    在Unity中进行速度和GC Alloc的测试 测试脚本: using UnityEngine; using System; using System.Collections; using Syste ...

  5. 如何查看子线程中的GC Alloc

    1)如何查看子线程中的GC Alloc2)Build时,提示安卓NDK异常3)如何获得ParticleSystem产生的三角形数量4)关于图片通道的问题5)GPUSkinning导致模型动画不平滑 M ...

  6. 减少GC开销的措施

    程序的运行会直接影响系统环境的变化,从而影响GC的触发.若不针对GC的特点进行设计和编码,就会出现内存驻留等一系列负面影响.为了避免这些影响,基本的原则就是尽可能地减少垃圾和减少GC过程中的开销.具体 ...

  7. 减少GC开销的5个编码技巧

    在这篇文章中,我们来了解一下让代码变得高效的五种技巧,这些技巧可以使我们的垃圾收集器(GC)在分配内存以及释放内存上面,占用更少的CPU时间,减少GC的开销.当内存被回收的时候,GC处理很长时间经常会 ...

  8. jvm学习笔记二(减少GC开销的建议)

    一:触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大.更值得关注的是主GC的触发条件,因为它对系统影响很明显.总 ...

  9. JVM的分区+查看GC对象是否存活+3种GC算法+7种垃圾收集器+如何减少GC次数

    一.JVM的分区:   1.程序计数器(私有) 程序计数器是一块较小的内存分区,你可以把它看做当前线程所执行的字节码的指示器. 在虚拟机的概念模型里,字节码解释器工作时,就是通过改变计数器的值来选择下 ...

随机推荐

  1. 也来谈谈wap端瀑布流布局

    Definition 瀑布流布局,在视觉上表现为参差不齐的多栏布局,随着页面滚动条向下滚动,新数据不断被加载进来. 瀑布流对于图片的展现,是高效而具有吸引力的,用户一眼扫过的快速阅读模式可以在短时间内 ...

  2. .net弹出框

    弹出框可以使用div来显示在前台增加 <div id="flowDiv" runat="server"> <div class="r ...

  3. SAP用户权限解剖及自修改

    通常BASIS会使用PFCG做权限管理,时你保存时会产生一个系统外的profile name,记得SU01时用户有profile 和role两栏位吗?它们的关系如何呢? 首先明白几个概念.1.acti ...

  4. 在Android中引入Java8的lambda表达式

    我用的是retrolambda这个插件,下面来说下如何添加它. 项目地址:https://github.com/evant/gradle-retrolambda 在根项目的build.gradle中添 ...

  5. Android 从Gallery获取图片

    本文主要介绍Android中从Gallery获取图片 设计项目布局 <LinearLayout xmlns:android="http://schemas.android.com/ap ...

  6. tomcat <context path>的意义及作用

    context path 是在tomcat 要支持多个应用时对每个应用的docBase做区别时的区分符. 打个比方假如你有两个请求:一个为 http:localhost:8080/test1/hell ...

  7. Facebook开源动画库 POP-小实例

    实例1:图片视图跟着手在屏幕上的点改变大小 - (void)viewDidLoad { [super viewDidLoad]; //添加手势 UIPanGestureRecognizer *gest ...

  8. 怎么样使用yum来安装、卸载jdk

    安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java version "1.6.0"OpenJDK  Runtime Envi ...

  9. 详解javascript,ES5标准中新增的几种高效Array操作方法

    1.js中常用的数组Array对象属性: 如图,其中用红色圆圈标记的部分,为ES5新增的属性. 2.浏览器支持情况: IE:9+; Chrome; Firefox2+; Safari 3+; Oper ...

  10. spring中的bean

    环境准备 Eclipse上新建一个简单的maven工程,Artifact Id选择maven-archetype-quickstart: 添加spring-context依赖: <depende ...