2013-04-29 89 views
1
Using ms As New MemoryStream 
    Dim st As New GZipStream(ms, CompressionMode.Compress, True) 

    '... some code 

    Return buffer 
End Using 

而这种代码分析问题:使用声明还是引起了2个一次性对象

dim As New MemoryStream 
using st As New GZipStream(ms, CompressionMode.Compress, True) 

    '... some code 

    Return buffer 
End Using 

我曾呼吁的Dispose()和close()一些旧代码手动在流对象 - 这是造成CA2202代码分析警告可能会对Dispose()进行多次调用。所以我添加使用语句为记忆流和gzipstream和错误没有消失!?

如果我在内存流或gzipstream对象上使用它,那么错误就会消失。是造成这种行为?

回答

0

原因可能是,因为GZipStream在调用其自己的Dispose方法时正在处置基础流。因此,我建议只保留Using声明GZipStream。至少,这是.NET框架中大多数内置流封装的行为。例如BufferedStream将关闭时Close()/Dispose()被调用底层流对象

+0

否,同时使用时存在的误差(具体根据MSDN文档,行为在代码示例中的注释解释)和消失时仅1使用声明被使用! – jaffa 2013-04-29 16:32:58

+0

@jaffa,请参阅编辑,我重新回答了答案。 – 2013-04-29 16:38:01

+0

我想这可能会发生,谢谢。 – jaffa 2013-04-30 07:47:41

相关问题