次のコードを検討してください。
Stream stream = GetStreamFromSomewhere();
XmlDictionaryReader mtomReader =XmlDictionaryReader.CreateMtomReader
(
stream,
Encoding.UTF8,
XmlDictionaryReaderQuoatas.Max
);
/// ...
/// is there best way to read binary data from mtomReader's element??
string elementString = mtomReader.XmlReader.ReadElementString();
byte[] elementBytes = Covert.FromBase64String(elementString);
Stream elementFileStream = new FileStream(tempFileLocation);
elementFileStream.Write(elementBytes,0,elementBytes.Length);
elementFileStream.Close();
/// ...
mtomReader.Close();
問題は、バイナリ添付ファイルのサイズが 100Mb を超える場合があることです。要素のバイナリ添付ファイルをブロックごとに読み取り、それを一時ファイル ストリームに書き込む方法はありますか?
2 番目の - さらに具体的な問題 - 要素のコンテンツを読み取る前に、mtomReader は MIME バイナリ添付ファイルの内部キャッシュを作成しますか。つまり、バイナリ データにメモリを割り当てますか? または、入力ストリームから直接バイトを読み取りますか?