首页 新闻 赞助 找找看

如何快速初始化类数组或者List<>

0
悬赏园豆:10 [待解决问题]

比如有这样一个类

class A

{

int a1;

int a2;

float b1;

float b2;

...100个字段或属性

}

 

List<A> myLsit=new List<A>()  后,需要

for...

{

myList[i]=new A()

}

后才能真正使用。而这样初始化的效率不高,若类A有上百个字段,初始化长度为100万的List<A> myLsit需要1秒多时间。时间都花在myList[i]=new A()上面了。是否有什么办法

能够更快的初始化呢? 

改为List<A> myLsit=new List<A>(1000000),预先分配内存的时间是一样的,主要花费在new每一个myList[i]=new A() 上面。

希望能够达到内存中分配数组的速度,1秒2-3亿。 

 

希望能够得到您的帮助!谢谢哈。

YTYT2002YTYT的主页 YTYT2002YTYT | 初学一级 | 园豆:113
提问于:2012-04-24 10:01
< >
分享
所有回答(3)
0

用 複製對象試一下。clone

無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-24 10:37
0

一般的类字段应该没有那么多  一般都是实体类,对应的数据库表

  下面是我写的一个实体类的字段和表中的字段进行匹配的一个demo

 

DataSet ds = null;
public IList<T> Select(string sql)
{
ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(sql,con);
adapter.Fill(ds);
//调用方法,传入查询的结果集
return ConvertToSelectData(ds.Tables[0]);
}
public IList<T> ConvertToSelectData(DataTable table)
{
//判断查询的结果集中是否有数据
if (table == null)
return null;
if (table.Rows.Count == 0)
return null;
IList<T> list = new List<T>();
//遍历结果集的行
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
T t = Activator.CreateInstance<T>();
PropertyInfo [] property= t.GetType().GetProperties();
foreach (PropertyInfo pro in property)
{
for (int j = 0; j < table.Columns.Count; j++)
{
if (pro.Name.ToLower().Equals(table.Columns[j].ColumnName.ToLower()))
{
pro.SetValue(t, table.Rows[i][j], null);
}
}
}
list.Add(t);
}
return list;
}

┢┦偉 | 园豆:1240 (小虾三级) | 2012-04-24 14:12
0

最后还是采用结构数组来存储数据了,开辟内存几乎不用消耗时间。用类数组等开辟内存空间较慢。

YTYT2002YTYT | 园豆:113 (初学一级) | 2014-12-14 22:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册