我应该处置 IRandomAccessStream 还是底层 MemoryStream?
Should I dispose IRandomAccessStream or underlying 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 文章是最好的。
根据 AsRandomAccessStream 扩展方法的源代码,您不需要处理基础流。
您可以轻松地在磁盘上找到程序集 System.Runtime.WindowsRuntime.dll
,并使用任何反编译器(例如 JetBrains dotPeek)查看其源代码。
AsRandomAccessStream 方法创建 NetFxToWinRtStreamAdapter
class 的实例,它以适当的方式实现 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();
}
以下哪个是正确的?
using (var memoryStream = new MemoryStream())
{
var randomAccessStream = memoryStream.AsRandomAccessStream();
process(randomAccessStream);
}
或
using (var randomAccessStream = new MemoryStream().AsRandomAccessStream())
{
process(randomAccessStream);
}
我知道我可以直接使用 Windows.Storage.Streams.InMemoryRandomAccessStream();
但我还是很好奇。理想情况下,带有解释的 MSDN 文章是最好的。
根据 AsRandomAccessStream 扩展方法的源代码,您不需要处理基础流。
您可以轻松地在磁盘上找到程序集 System.Runtime.WindowsRuntime.dll
,并使用任何反编译器(例如 JetBrains dotPeek)查看其源代码。
AsRandomAccessStream 方法创建 NetFxToWinRtStreamAdapter
class 的实例,它以适当的方式实现 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();
}