一种遍历数据的方法及终端与流程

文档序号:18899068发布日期:2019-10-18 21:41阅读:140来源:国知局
一种遍历数据的方法及终端与流程

本发明涉及软件开发领域,尤其涉及一种遍历数据的方法及终端。



背景技术:

在unity3d的开发过程中,无法避免需要使用list集合存储数据,使用遍历list获得每一个数据。而unity系统的泛型list存在着产生内存垃圾的问题,当list存储的是值类型时,由于.net的list集合使用的系统默认枚举器返回的是object类型,它在finally中回收枚举器时就需要进行装箱box操作,也就是将值类型转换为object类型,这样就产生了内存垃圾,从而导致内存垃圾收集gc,影响程序性能。



技术实现要素:

本发明所要解决的技术问题是:提高一种遍历数据的方法及终端,能够避免在使用list遍历数据时,产生gc。

为了解决上述技术问题,本发明采用的一种技术方案为:

一种遍历数据的方法,包括步骤:

s1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;

s2、确定遍历的list集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型。

为了解决上述技术问题,本发明采用的另一种技术方案为:

一种遍历数据的终端,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;

s2、确定遍历的list集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型。

本发明的有益效果在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历list集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行box装箱操作,也就不会产生gc,从而提高了系统性能。

附图说明

图1为本发明实施例的一种遍历数据的方法流程图;

图2为本发明实施例的一种遍历数据的终端的结构示意图;

图3为本发明实施例建立的一种数据结构图;

图4为本发明实施例建立的一种数据结构图;

图5为本发明实施例的用系统默认返回的枚举器的仿真结果图;

图6为本发明实施例的用自定义的泛型的枚举器的仿真结果图;

标号说明:

1、一种遍历数据的终端;2、存储器;3、处理器。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

本发明最关键的构思在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,设置返回的枚举器的类型与遍历到的数据的类型相同。

请参照图1,一种遍历数据的方法,包括步骤:

s1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;

s2、确定遍历的list集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型。

从上述描述可知,本发明的有益效果在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历list集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行box装箱操作,也就不会产生gc,从而提高了系统性能。

进一步的,所述步骤s2中设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型包括:

当遍历的list集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型。

由上述描述可知,由于系统默认的枚举器返回的是object类型,所以如果当遍历到的数据类型为值类型时,若采用系统默认的枚举器,则将会执行box操作,需要将值类型转化为object类型,而本发明通过设置返回的泛型的枚举器的类型为值类别,保证所述枚举器的类型与遍历到的数据类型相同,避免了装箱box操作。

进一步的,所述步骤s2中设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型包括:

设置返回的所述泛型的枚举器的current属性为与遍历的list集合中的数据相同的类型,所述current属性指示了返回的所述泛型的枚举器的类型。

由上述描述可知,通过对枚举器的current属性进行设置实现对泛型的枚举器的类型的指定,方便快捷。

进一步的,还包括步骤:

自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;

在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器。

由上述描述可知,通过两个可变大小的数组分别存储枚举器及枚举器对应的状态,可以方便对枚举器的管理,进行自适应的增加和动态的调整,避免对枚举器的回收,也就避免了gc的产生。

进一步的,所述更新所述两个数组包括:

根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。

由上述描述可知,如果新建了枚举器,则对数组进行同步的更新,保证一致性,避免出错。

请参照图2,一种遍历数据的终端,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;

s2、确定遍历的list集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型。

从上述描述可知,本发明的有益效果在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历list集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行box装箱操作,也就不会产生gc,从而提高了系统性能。

进一步的,所述步骤s2中设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型包括:

当遍历的list集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型。

由上述描述可知,由于系统默认的枚举器返回的是object类型,所以如果当遍历到的数据类型为值类型时,若采用系统默认的枚举器,则将会执行box操作,需要将值类型转化为object类型,而本发明通过设置返回的泛型的枚举器的类型为值类别,保证所述枚举器的类型与遍历到的数据类型相同,避免了装箱box操作。

进一步的,所述步骤s2中设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型包括:

设置返回的所述泛型的枚举器的current属性为与遍历的list集合中的数据相同的类型,所述current属性指示了返回的所述泛型的枚举器的类型。

由上述描述可知,通过对枚举器的current属性进行设置实现对泛型的枚举器的类型的指定,方便快捷。

进一步的,还包括步骤:

自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;

在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器。

由上述描述可知,通过两个可变大小的数组分别存储枚举器及枚举器对应的状态,可以方便对枚举器的管理,进行自适应的增加和动态的调整,避免对枚举器的回收,也就避免了gc的产生。

进一步的,所述更新所述两个数组包括:

根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。

由上述描述可知,如果新建了枚举器,则对数组进行同步的更新,保证一致性,避免出错。

实施例一

请参照图1,一种遍历数据的方法,包括步骤:

s1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;

s2、确定遍历的list集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型;

具体的,当遍历的list集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型;

所述设置返回的所述泛型的枚举器的类型为与遍历的list集合中的数据相同的类型包括:

设置返回的所述泛型的枚举器的current属性为与遍历的list集合中的数据相同的类型,所述current属性指示了返回的所述泛型的枚举器的类型;

还包括步骤:

自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;

在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器;

其中,更新所述两个数组具体包括:根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。

实施例二

请参照图2,一种遍历数据的终端1,包括存储器2、处理器3以及存储在所述存储器2上并可在所述处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的步骤。

实施例三

将上述遍历数据的方法应用于具体的场景并进行测试:

请参照图3、4,自定义一个自己的枚举器myenumerator<t>,它是继承于ienumerator<t>的,作为实现ienumerable<t>接口的mylist的迭代器。泛型的ienumerator<t>设计为实现ienumerator,所以有一个泛型的current属性,在迭代数据为值类型时,可以指定返回的泛型的枚举器的类型为值类型,指定了类型后就不需要装箱box操作,泛型的ienumerable<t>实现的是ienumberable,于是对于实现getenumerator,就有了两个方法,一个是通过非泛型ienumerator中current方法中的object返回形式,该形式导致装箱操作,另一个是通过泛型ienumerator中泛型current方法中的泛型返回形式,为了避免使用系统默认的非泛型的返回形式,需要将实现非泛型ienumberable接口中的getenumerator私有化,将泛型ienumberable<t>接口中的getenumerator方法公开,这样在迭代数据为值类型时,调用的是这个公开的getenumerator方法,就指定了枚举器返回的是值类型,不需要装箱;

自定义集合mylist<t>,定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;

在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器;

其中,更新所述两个数组具体包括:根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组;

编写测试脚本,执行1000次遍历,图5、6分别表示用系统默认返回的枚举器的仿真结果图和用自定义的泛型的枚举器的仿真结果图,通过对比可知,用系统默认返回的枚举器产生了39.1kb的gc,而用自定义的泛型的枚举器并没有产生gc。

综上所述,本发明提供的一种遍历数据的方法及终端,自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历list集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行box装箱操作,也就不会产生gc,从而提高了系统性能。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1