Рассмотрим следующий код:
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();
Проблема в том, что размер двоичного вложения иногда превышает 100 МБ. Есть ли способ прочитать двоичный блок прикрепления элемента за блоком, а затем записать его во временный файловый поток, чтобы я мог уйти от выделения памяти для дырки?
Второй - еще более специфический вопрос - создает ли mtomReader какой-либо внутренний кэш двоичного вложения mime до того, как я прочитал содержимое элемента, т.е. выделил ли память для двоичных данных? Или он читает байты из входного потока напрямую?