MemoryStreamが2GBまでとのことですので、2GBを超える予定の場合テンポラリファイルのファイルストリームが返る、メソッドを作成してみました。
public static class TempStreamFactory
{
/// <summary>
/// 予定サイズに応じて、MemoryStream または FileStream(DeleteOnClose)を返す。
/// </summary>
public static Stream Create(long expectedSize)
{
if (expectedSize <= int.MaxValue)
{
return new MemoryStream((int)expectedSize);
}
else
{
string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
return new FileStream(
tempPath,
FileMode.CreateNew,
FileAccess.Write,
FileShare.None,
bufferSize: 81920,
options: FileOptions.DeleteOnClose
);
}
}
}
巨大なデータを扱う可能性がある場合、こちらのメソッドを使えばMemoryStreamとFileStreamを自動的に切り替えます。
予めサイズを知る必要がありますが。
コメント