c# - 从数据表读取数据时减少内存使用

标签 c# wpf memory-management datatable

我试过用这种方法从数据表中读取数据,有没有其他更好的方法将数据存储在列表中(以减少内存使用)。

代码:

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/

相关文章:

c# - 以科学计数法解析小数

cordova - 当正常退出不起作用时,我的应用程序崩溃 - 对内存的影响

javascript - 如何确保正确关闭主干 View

c# - 使用 ephtmltopdf 将 html 转换为 pdf

c# - LINQ - 使用选择 - 理解选择

c# - FFMPEG 强制覆盖

wpf - 如何使用转换将 WPF 单选按钮选择绑定(bind)到 Viewmodel?

c# - 是否有 IValueConverter 执行 if-then

c# - 带有图标和文本的 WPF TreeView

iOS - 防止对象重新分配