关于创建大量对象内存损耗问题

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 打赏 收藏 转发到动态 举报
写回复
用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.可以考虑对象在使用前和使用过两种情况下的差异,尽量修复使用
  • 打赏
  • 举报
回复
[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
  • 打赏
  • 举报
回复
完全可以用轻量级的数组或结构代替这个类。
效率会提高。
  • 打赏
  • 举报
回复
呵呵,交朋友用邮箱怎么行?我的qq:261882714
xhueducls 2009-02-13
  • 打赏
  • 举报
回复
可以在合适的时候自己手动垃圾回收下,不过觉得创建这么多对象做什么呢?
acqy 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tmxk2002 的回复:]
引用 5 楼 acqy 的回复:
天马技术分进展很快啊!学习的榜样!!

呵呵,最近忙了,来的少了~~~
[/Quote]

我的邮箱是acqy@163.com,希望和你交个朋友!
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acqy 的回复:]
天马技术分进展很快啊!学习的榜样!!
[/Quote]
呵呵,最近忙了,来的少了~~~
acqy 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】 ?

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧