以下是引起问题的代码。
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)
答案 0 :(得分:0)
您真的不希望仅使用Linq将BOM附加到巨大的字节数组中。直接通过字符串编码过程将字节写入memory buffer中会更好。
更好的还是围绕流重建整个数据路径。