Syl*_*cas 5 c# linq memory blob
各位开发者大家好,
我正在尝试使用 Linq 查询改进 Oracle 数据库中以 BLOB 格式存储的 XML 对象列表的导出。
遗憾的是,其中一个 BLOB 相当大,当我读取它时,内存使用量增加到 2 GB。我的fileSet对象是一个IQueryable<myRecord>对象。我试过
foreach (var file in fileSet){...}
Run Code Online (Sandbox Code Playgroud)
和
var files = fileSet.ToList(); //This time the list is causing the memory load.
foreach(file in files){...}
Run Code Online (Sandbox Code Playgroud)
和
var e = fileSet.AsEnumerable().GetEnumerator();
while(e.MoveNext()){...}
Run Code Online (Sandbox Code Playgroud)
但每次我达到列表中的大记录时,内存都会被过度使用。为了创建导出,我正在寻找一些使用的代码Buffer.BlockCopy,但由于内存过度充电,如果您知道如何减少内存使用或延迟加载每个 blob,则没有必要朝这个方向进一步发展:(
最后,因为我无法使用 linq 在内存中存储一些轻量的内容,所以OracleCommand在使用 linq 获取文件的 ID 后,我使用了流式传输 xml 文件。
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var blob = reader.GetOracleLob(0);
var buffer = new byte[128];
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Write))
{
blob.CopyTo(fs);
}
}
}
Run Code Online (Sandbox Code Playgroud)