比如有这样一个类
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亿。
希望能够得到您的帮助!谢谢哈。
用 複製對象試一下。clone
一般的类字段应该没有那么多 一般都是实体类,对应的数据库表
下面是我写的一个实体类的字段和表中的字段进行匹配的一个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;
}
最后还是采用结构数组来存储数据了,开辟内存几乎不用消耗时间。用类数组等开辟内存空间较慢。