我在sql server中有一个表
行数:1229502
列数:56
TotatlSpaceInKB:292616
当我获取完整的表格并在C#中填充DataTable时,它会给出一个' System.OutOfMemoryException'。
所以我决定以2个块的形式获取表格并填充2个不同的DataTables,这些都有效。
但根据要求,我必须将所有数据存储在List中,
不幸的是,将两个DataTable存储在同一个List中会产生异常。
将一个表转换为列表顺利进行,但是当我将第二个表存储在同一个列表中时,它会出错。
我通过以下代码将DataTable转换为List
//CC_Data is DataTable
//CC_List is List<Cent_Compilation>
//Cent_Compilation is class with same properties as in Database
foreach (DataRow row in CC_Data.Rows)
{
Compilation_Methods.CC_List.Add(Compilation_Methods.populateClassObject(row, CC_Data));
}
populateClassObject是转换方法
public static Cent_Compilation populateClassObject(DataRow row, DataTable table)
{
using (Cent_Compilation CC = new Cent_Compilation())
{
try
{
PropertyInfo[] columns;
Type myType = (typeof(Cent_Compilation));
columns = myType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
object data = null;
foreach (var column in columns)
{
if (table.Columns.Contains(column.Name))
{
data = DBSupport.ExtractData(row, column.Name);
if (data != null)
{
column.SetValue(CC, DBSupport.FindNReplaceDataType(data, column.PropertyType), null);
}
}
}
}
catch (Exception ex)
{
//Log.Add("Error in Method populateClassObject Class Inter_Data" + ex.Message);
}
return CC;
}
}
这就是异常的样子: