一次加载所有数据表时引发System.OutOfMemoryException

时间:2018-10-03 01:42:23

标签: c# sql-server database dataset out-of-memory

我正在使用一个表中有近800万条记录的数据库。我知道这是海量数据,不应一次加载所有数据。但是,对于我的项目而言,将所有这些记录加载到驻留在内存中的数据集很重要。

当我尝试使用以下代码填充数据集中的数据表时:

Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            foreach (Component component in EnumerateComponents())
            {
                string name = component.GetType().Name;
                if (name.Contains("baghadadpTableAdapter"))
                {
                    string TableName = name.Substring(0, name.IndexOf("TableAdapter"));
                   baghadadpTableAdapter1.Fill(ds1.persons);
                }
            }
            stopwatch.Stop();
            TimeSpan time = stopwatch.Elapsed;

在“ baghadadpTableAdapter1.Fill(ds1.persons);”行中发生以下错误:

System.OutOfMemoryException: 'Exception of type 'System.OutOfMemoryException' was thrown.'

如何解决此问题,同时将所有这些巨大数据加载到ds1中的数据表人员

3 个答案:

答案 0 :(得分:3)

您可以:

  • 增加机器上的内存,
  • 仅加载相关列。

最终,您将需要考虑如何按块处理记录。我不知道您的应用程序如何工作,但是当应用程序需要对800万个对象进行超快速访问时,我还没有遇到这种情况。

答案 1 :(得分:1)

DataTable众所周知对于大型设备不利。我已经看到使用6-7次 内存的表与原始数据一样多。

如果您真的需要在内存中存储那么多数据,则可以考虑更改为List域对象而不是DataTable。但是我也挑战“需要”在内存中存储数百万或记录。

答案 2 :(得分:0)

我只是分页数据集。您可以研究几种不同的方法。