データベースから 100.000 行を読み取る必要があります。次のコードを使用します。
List<elementClass> Listelement = new List<elementClass>();
using (DbDataReader reader = cmd.ExecuteReader())
{
while (reader .Read())
{
elementClass element= new elementClass();
DatabaseClass.ReadFromObject(reader , element);
Listelement.Add(element);
}
}
ReadFromObject :
public static void ReadFromObject(DbDataReader dr, Object obj)
{
DataTable tableDescriptor = dr.GetSchemaTable();
try
{
//Id - Identifier
obj.GetType().GetProperty("Id").SetValue(obj, dr.GetValue(dr.GetOrdinal("Id")), null);
PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (PropertyInfo pi in properties)
{
if (!ExistColumn(tableDescriptor, pi.Name)) continue; // field not found
if (dr[pi.Name] == DBNull.Value) continue;
if (pi.PropertyType.IsEnum) { }
else
{
switch (pi.PropertyType.Name)
{
case "DateTime":
object dateValue = null;
if (dr[pi.Name].GetType().Name == "String")
dateValue = F24Common.Utility.DateFromString(dr.GetString(dr.GetOrdinal(pi.Name)));
else
dateValue = dr.GetDateTime(dr.GetOrdinal(pi.Name));
pi.SetValue(obj, dateValue, null);
break;
default:
pi.SetValue(obj, dr.GetValue(dr.GetOrdinal(pi.Name)), null);
break;
}
}
}
}
catch (Exception )
{
}
}
このコードには明らかに問題があります。遅すぎます (処理全体に 45 ~ 50 分かかります)。複数の CPU コア (クアッドコア CPU が利用可能) を同時に使用してリストを埋めることは可能ですか?