将var转换为.ToArray()时,ToArray()在C#中引发异常

时间:2019-12-19 09:12:26

标签: c# toarray

以下是引起问题的代码。

public static byte[] ToByteArrayWithBom(this string s, Encoding encoding) {
  var data = encoding.GetBytes(s);
  long str = data.Length; // 323603364
  var premble = encoding.GetPreamble();
  var concatData = premble.Concat(data);
  return concatData.ToArray();
  // return encoding.GetPreamble().Concat(data).ToArray();
}

如果传递给该函数的数据量较少,该函数将起作用。
当我们要传递大量数据时,则抛出异常。 这是我们面临问题concatData.ToArray();的地方。当我们将var数据转换为.ToArray()时,将引发异常。
我不确定.ToArray()的最大限制是否会导致此问题或其他任何问题。

异常详细信息:

  

System.OutOfMemoryException:引发了类型System.OutOfMemoryException的异常
  在System.Linq.Buffer…ctor(IEnumerable1 source)
  在System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source)

1 个答案:

答案 0 :(得分:0)

您真的不希望仅使用Linq将BOM附加到巨大的字节数组中。直接通过字符串编码过程将字节写入memory buffer中会更好。

更好的还是围绕流重建整个数据路径。