社区
C#
帖子详情
关于创建大量对象内存损耗问题
anycall2004
2009-02-13 09:19:12
如果有个类结构如下
class A
{
public int x = 0 ;
public int y = 0 ;
}
我想得到一个List<A>的集合
在一个10000*10000的循环中我就必须创建100000000次A对象
效率很差
我想能不能通过clone不进行new对象效率可以提高呢?
我试了效果不明显
不知道谁有好方法介绍下好么 ?
...全文
209
19
打赏
收藏
关于创建大量对象内存损耗问题
如果有个类结构如下 class A { public int x = 0 ; public int y = 0 ; } 我想得到一个List的集合 在一个10000*10000的循环中我就必须创建100000000次A对象 效率很差 我想能不能通过clone不进行new对象效率可以提高呢? 我试了效果不明显 不知道谁有好方法介绍下好么 ?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wpasp
2009-02-18
打赏
举报
回复
1.使用List<>或List的Add增加元素时,它会根据总项个数和容量大小不断的重新分配内部数组,这是一个引起效率低下的原因。
2.如果你的类相当简单,则使用结构代替它会更好,结构比类占用更少的内存空间;
3.还有一种解决方法是,将你的类序列化或重新生成一个中间数据(如现在你的类只有x和y两个属性,则可以生
成x的值.b的值字串,如:0.0),在需要这个对象时,再来一个反序列化或解析(Parse("0.0"))。
wuyi8808
2009-02-15
打赏
举报
回复
struct A
{
public int x;
public int y;
}
RFEZGC
2009-02-15
打赏
举报
回复
随你怎么写了,反正clone只是声明。
你要是想用 浅表副本或者深层副本都行
浅表副本就省点电内存吧
你将返回的类型为IList吧,反正数组,List《》就是从这个接口里继承的
cppfaq
2009-02-15
打赏
举报
回复
1.可以考虑是否真的需要这么多的循环,从算法上优化
2.可以考虑14楼说的延迟构建
3.可以考虑对象在使用前和使用过两种情况下的差异,尽量修复使用
易企加_天马行空
2009-02-15
打赏
举报
回复
[Quote=引用 12 楼 geaim 的回复:]
楼主怎么不用对象数组呢,这个效率很高的啊。
具体方法是这样的,在类中最好定义一个构造函数。
代码:
初始化的时候,这样初始化。效率非常高。
A[] TestA = new A[100000];
[/Quote]
呵呵,这样没有初始化吧,只产生了一个指针,并没有分配内存,你必须对数组里每个项new 一个对象后才能使用。
fskang
2009-02-14
打赏
举报
回复
像这种情况如果可能的话可以考虑延迟构造。你不一定非要预先创建这么多对象。在使用的时候创建就可以了。
bhtfg538
2009-02-14
打赏
举报
回复
这种 东西保存在 struct 值类型 就足够了
哈哈潜伏哥
2009-02-14
打赏
举报
回复
楼主怎么不用对象数组呢,这个效率很高的啊。
具体方法是这样的,在类中最好定义一个构造函数。
代码:
初始化的时候,这样初始化。效率非常高。
A[] TestA = new A[100000];
perisonchen
2009-02-14
打赏
举报
回复
关注,学习
blue_apple2006
2009-02-13
打赏
举报
回复
完全可以用轻量级的数组或结构代替这个类。
效率会提高。
易企加_天马行空
2009-02-13
打赏
举报
回复
呵呵,交朋友用邮箱怎么行?我的qq:261882714
xhueducls
2009-02-13
打赏
举报
回复
可以在合适的时候自己手动垃圾回收下,不过觉得创建这么多对象做什么呢?
acqy
2009-02-13
打赏
举报
回复
[Quote=引用 6 楼 tmxk2002 的回复:]
引用 5 楼 acqy 的回复:
天马技术分进展很快啊!学习的榜样!!
呵呵,最近忙了,来的少了~~~
[/Quote]
我的邮箱是acqy@163.com,希望和你交个朋友!
易企加_天马行空
2009-02-13
打赏
举报
回复
[Quote=引用 5 楼 acqy 的回复:]
天马技术分进展很快啊!学习的榜样!!
[/Quote]
呵呵,最近忙了,来的少了~~~
acqy
2009-02-13
打赏
举报
回复
天马技术分进展很快啊!学习的榜样!!
易企加_天马行空
2009-02-13
打赏
举报
回复
如果定义class,好像clone也要去new这个对象的吧。
如果每个A都是一个独立的对象,估计没有办法有更高的效率,因为new A对象是最起码的操作,因为类的对象是放在堆里的,你不去new是不会重新分配内存什么的,只是会指向同一个内存块,其实就是同一个对象。
acqy
2009-02-13
打赏
举报
回复
Clone恐怕也难啊。楼主用struct试试?
ya1li2shan3da4zhu
2009-02-13
打赏
举报
回复
需要实践的问题呢,但是就现在的机器配置,好像不需要考虑内存问题吧
csrwgs
2009-02-13
打赏
举报
回复
能不能CLONE ClassA【10000】 ?
java 一个
对象
new两次_Java中频繁new一些
对象
会有什么
问题
?
后果就是会造成
内存
溢出或者频繁的进行垃圾回收导致应用性能下降。
内存
溢出按照你目前的写法,在某一个时刻,同时有多个请求时,会
创建
大量
的
对象
,请求时
对象
被引用无法回收,就会有
内存
溢出的风险。这就限制了程序并发能力。频繁的垃圾回收假设请求不是同一个时刻的。但随着时间的推移,jvm
创建
的
对象
会线性增加。说到这里,我们先看下JVM的垃圾回收是怎样进行的?大多数情况下,
对象
在新生代Eden区中分配。当Eden...
java
内存
泄漏总结
1、尽早释放无用
对象
的引用。特别是大
对象
和集合
对象
,通过置为NULL,暗示垃圾收集器来收集该
对象
,防止发生
内存
泄露。 2、程序中如果出现
大量
使用字符串处理,避免使用 String ,应使用 StringBuffer. for(Int i=0;i) { String s1=""; s1=s1+"abc";//不要这样写 } 3、尽量少用静态变量,因为静态变量是全
Unity——
对象
池
在开发Unity游戏时常常需要使用同一个Prefab来
创建
多个的
对象
,如果
创建
的数量少时还好,不会影响效果,如果需要
大量
生成时,反复实例化和销毁,不停的消耗
内存
,出现卡顿甚至卡死现象。为了解决
大量
创建
重复
对象
造成的
内存
损耗
,采用
对象
池的方式来解决。在需要
创建
的时候拿出来,不用的时候放回去,避免反复申请和销毁,
损耗
内存
。 代码如下: using System.Collections; usin...
c++ 类、
对象
和
内存
1 类、
对象
和
内存
2011-01-20 22:45 c++ 类、
对象
和
内存
1 类、
对象
和
内存
1.1 通过
内存
看
对象
我们先回顾一下类和
对象
的定义,类是定义同一类所有实例变量和方法的蓝图或原型;
对象
是类的实例化。从
内存
的角度可以对这两个定义这样理解,类刻画了实例的
内存
布局,确定实例中每个数据成员在一块连续
内存
中的位置、大小以及对
内存
的解读方式;
对象
就是系统根据类刻
Javascript
创建
对象
的四种方式
1、直接
创建
创建
一个学生
对象
:名称,年龄 方法:吃饭 var student={ name:'王一', age:21, eat:function(){ console.log(this.name+"正在吃") } } 优点:方法简单 缺点:无法量产,如果量产则需要
大量
代码,降低编辑效率 2、工厂模式
创建
通过函数来
创建
对象
,可以把
创建
对象
的过程封装在...
C#
110,561
社区成员
642,566
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章