2013-04-29 35 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

相關問題