Linq查询blob列表,内存使用情况

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,则没有必要朝这个方向进一步发展:(

Syl*_*cas 1

最后,因为我无法使用 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)