【问题标题】:C# DbDataReader populating List result in OutOfMemoryExceptionC# DbDataReader 填充列表导致 OutOfMemoryException
【发布时间】:2016-12-02 19:13:08
【问题描述】:

我目前正在尝试从包含大约 3-4 百万行的紧凑型 ce 数据库中读取一个大表。我目前的数据库大小为 832MB。 用记录填充列表会抛出OutOfMemoryException

样机代码:

    using (var con = new DomainContext())
    {
        foreach (var item in con.logRecords)
        {
            if (item.Info != null && item.Info != "")
                item.Timestamp = DateTime.ParseExact(item.Info, "MM.dd.yyyy HH:mm:ss.fff", culture).Ticks;
        }
        con.SaveChanges();

    }

新方法,仍然无法正常工作....

        Task.Factory.StartNew(() =>
        {
            using (var con = new DomainContext())
            {
                for (int i = 0; i < 300; i++)
                {
                    try
                    {
                        var temp = con.logRecords.Where(p => p.Id <= i * 10000 + 10000 && p.Id >= i * 10000);

                        foreach (var item in temp)
                        {

                            if (item.Info != null && item.Info != "")
                                item.Timestamp = DateTime.ParseExact(item.Info, "MM.dd.yyyy HH:mm:ss.fff", culture).Ticks;
                        }

                        con.SaveChanges();

                    }
                    catch { }
                    GC.Collect();
                    Console.WriteLine(i.ToString());


                }
            }
        });

【问题讨论】:

  • 因为您总是在第二个代码中使用相同的字符串文字。这是在 .NET 字符串池中实习的。如果你使用new String("WGwegWEGwegWEGwegWEGwegWEGweg".ToCharArray()),你会得到同样的异常,因为通过构造函数初始化的字符串没有被保留。
  • 啊,没错!谢谢!我想我必须弄清楚如何批量执行此操作....
  • 最好的优化不是全部加载到内存中,而是处理记录组(通过数据库分页)或省略记录(使用WHERE ...)。
  • 我的新方法也没有成功。谁能举个例子?
  • 可以选择原始 SQL 吗?

标签: c# out-of-memory compact-database


【解决方案1】:

我使用原生 SQL,将时间戳解析为 SQL 时间戳,然后使用 DATEDIFF(datepart、startdate、enddate)找到自 1970 年以来的秒数。自第 0 年以来添加的秒数。我失去了毫秒部分,但我想这是下一个最好的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多