2017-01-17 7 views
1

какой из следующих правильных?Должен ли я использовать IRandomAccessStream или базовый модуль MemoryStream?

using (var memoryStream = new MemoryStream()) 
{ 
    var randomAccessStream = memoryStream.AsRandomAccessStream(); 
    process(randomAccessStream); 
} 

или

using (var randomAccessStream = new MemoryStream().AsRandomAccessStream()) 
{ 
    process(randomAccessStream); 
} 

Я знаю, что могу использовать Windows.Storage.Streams.InMemoryRandomAccessStream(); напрямую, но мне очень интересно в любом случае. В идеале статья MSDN с объяснением была бы лучше всего.

ответ

0

В соответствии с исходным кодом метода расширения AsRandomAccessStream вам не нужно выделять базовый поток.

Вы можете легко найти сборку System.Runtime.WindowsRuntime.dll на своем диске и посмотреть исходный код с помощью любого декомпилятора (например, JetBrains dotPeek).

метод AsRandomAccessStream создает экземпляр NetFxToWinRtStreamAdapter класса, который реализует IDisposable соответствующим образом:

void IDisposable.Dispose() 
{ 
    Stream managedStream = this.managedStream; 
    if (managedStream == null) 
    return; 
    this.managedStream = (Stream) null; 
    if (this.leaveUnderlyingStreamOpen) //this flag is equal to false. 
    return; 
    managedStream.Dispose(); 
}