【问题标题】:Should I dispose IRandomAccessStream or underlying MemoryStream?我应该处置 IRandomAccessStream 还是底层 MemoryStream?
【发布时间】:2017-06-01 18:16:06
【问题描述】:

下列哪项是正确的?

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

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

我知道我可以直接使用Windows.Storage.Streams.InMemoryRandomAccessStream();,但我还是很好奇。理想情况下,最好是带有解释的 MSDN 文章。

【问题讨论】:

    标签: .net windows-runtime uwp dispose


    【解决方案1】:

    根据AsRandomAccessStream扩展方法的源码,你不需要dispose底层流。

    您可以在磁盘上轻松找到程序集 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2010-09-09
      • 2018-01-06
      • 1970-01-01
      • 2016-07-07
      相关资源
      最近更新 更多