我试过用这种方法从数据表中读取数据,有没有其他更好的方法将数据存储在列表中(以减少内存使用)。
代码:
foreach (System.Data.DataRow row in table.Rows)
{
Myclassdef data = new Myclassdef();
data.Data = new Dictionary<string, object>();
foreach (DataColumn columninfo in table.Columns)
{
object value = row[columninfo.ColumnName];
Myclassdef.Data.Add(columninfo.ColumnName, value);
}
}
最佳答案
您确定您的内存问题是由 DataTable
引起的吗?您正在将所有内容映射到一个自定义类中,每一行都有一个字典。所以你需要的内存是单独使用 DataTable
的两倍多。
但是,如果您从数据库中读取值并且首先将所有值加载到 DataTable
中,以便能够循环所有以使用字典创建自定义类,那么有一个更好的方法内存消耗方式:
使用
DataReader
从数据库中读取这些值。流式传输数据而不需要在内存中存储任何内容var list = new List<Myclassdef>(); using (var con = new SqlConnection(Settings.Default.ConnectionString)) { using (var cmd = new SqlCommand("SELECT ... WHERE Col1=@param1", con)) { cmd.Parameters.AddWithValue("@param1", "value1"); // ... con.Open(); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { Myclassdef data = new Myclassdef(); data.Data = new Dictionary<string, object>(); for (int i = 0; i < reader.FieldCount; i++) { data.Data.Add(reader.GetName(i), reader[i]); } list.Add(data); } } } }
关于c# - 从数据表读取数据时减少内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942290/