c# 프로젝트에서 코드 분석기를 돌렸더니, dispose를 두 번 하지 말라는 경고가 떴다.

그래서 알아 봤더니, using 구문안에 using을 또 사용할 때 나는 경고였다. 

using (Stream stream = new FileStream("file.txt", FileMode.OpenOrCreate))
{
    using (StreamWriter writer = new StreamWriter(stream))
    {
        // Use the writer object...
    }
}

이 이슈를 해결하려면 다음과 같이 처음 오브젝트는 using 대신 try catch로 예외 처리를 해 줘야 한다.

Stream stream = null;
try
{
    stream = new FileStream("file.txt", FileMode.OpenOrCreate);
    using (StreamWriter writer = new StreamWriter(stream))
    {
        stream = null;
        // Use the writer object...
    }
}
finally
{
    if(stream != null)
        stream.Dispose();
}

코드가 훨씬 더 복잡하고 귀찮아졌지만, 이게 맞는 방법이라고 한다.

 

출처 : docs.microsoft.com/ko-kr/previous-versions/visualstudio/visual-studio-2015/code-quality/ca2202-do-not-dispose-objects-multiple-times?view=vs-2015&redirectedfrom=MSDN

+ Recent posts