好的,我有一个简单的LINQ-to-SQL DataContext和一个表,在VARBINARY字段中包含大约900mb的PDF文档,以及一些其他标识符。 DeferredLoadingEnabled
设置为true
。代码的要点是将所有文档导出到我们服务器上的PDF文件中。
这不是我第一次使用linq-to-sql完成批量“脚本”之类的东西。它是一个很好的工具,可以简单地迭代许多记录。
我的问题是在我的foreach (var c in ctx.Documents)
的大约 1400 次迭代之后取Report
字段并使用File.WriteAllBytes(docName, c.Report.ToArray());
将其写入磁盘,我得到一个{ {1}}。
由于这是一段内部代码,我只是在我的选择中使用OutOfMemoryException
并成功完成。毋庸置疑,在观察我的程序崩溃时,我确实已经没有内存了。
有什么好的方法可以在将来避免这种情况,还是LINQ-to-SQL受到这种限制的约束?
一个可能的答案我能想到的是设置迭代限制并每隔500条记录重新安装我的DataContext。听起来不是很整洁......
答案 0 :(得分:1)
您是否尝试关闭对象更改跟踪(只读模式)?