【发布时间】:2019-08-14 12:17:07
【问题描述】:
我收到 OutOfMemoryException,我相信这是因为包含我要从数据库中提取的数据的数据库列太大。有没有办法只能从列中检索前 X 个字符? IE,读取前 X 个字符,写入文件,读取接下来的 X 个字符直到列末尾,同时保存到文件?
此列包含 XML 数据,我想将存储的 XML 传输到文本文件中。
更新
回答下面发布的问题:
这是抛出 OutOfMemoryException 的 Linq 查询:
var output = db.ReportOutputs
.Where(i => i.ReportOutputId == rptoId)
.Select(i => new
{
i.ReportRun.ReportRunId,
//i.ReportOutputXml.ToString().Substring(1, 100),
i.ReportOutputXml,
}).FirstOrDefault();
针对@bradbury9,ReportOutputXml 是 XML 存储在报告运行表中的位置。
【问题讨论】:
-
当你得到 OutOfMemoryException 时你能显示代码的平静吗?
-
获取
OutOfMemoryException表明您正在尝试读取几 Gb 的数据,这不太可能是单个长列的原因。您是否有机会分享您的查询以及您尝试处理的数据量的粗略数量级? -
标记为
xml,但谈论列。 minimal reproducible example 可以很好地了解问题。 -
在处理大文件时避免内存问题的最佳方法是使用流,您可以读取流并即时写入所需的数据,而无需在内存中获取大量数据
-
你有没有试过在outofmemory.com上提问,这里只能解决
StackOverflowException?除了开玩笑,请参阅minimal reproducible example。提示:异常堆栈帧通常很有帮助,OOM 经常由于递归调用而发生,例如在属性设置器中访问相同的属性。
标签: c# xml linq out-of-memory