MemoryStream
개체 처분에 대한 코드 분석 규칙을 만족시키는 데 문제가 있습니다.코드 만족 MemoryStream 및 CryptoStream을 사용하여 폐기 규칙 분석
이 지금 내 코드입니다 :
byte[] bytes;
MemoryStream stream = new MemoryStream();
using (CryptoStream cs = new CryptoStream(stream, transform, CryptoStreamMode.Write))
{
cs.Write(buffer, 0, buffer.Length);
}
bytes = stream.ToArray();
stream.Close();
return bytes;
이 스트림 두 번을 을 배치 될 수있다, 또는 이 (각 하나의 경고)에 배치 될 수 있다는 경고가 발생합니다.
나는 또한 using(MemoryStream stream = new MemoryStream())
블록으로 포장 해 보았습니다. 그 결과 이전 경고가 나타납니다.
마지막으로 Close()
또는 Dispose()
으로 전화를 제거하면 후자의 경고가 나타납니다.
두 가지 조건을 모두 충족시키는 방법이 있습니까? 문제를 닫을 수있는 예외 경로라고 가정하지만이 클래스의 작동 방식을 잘 모르겠습니다. 합니다 (using
블록 종료시) CryptoStream
가 배치
CA2202에서 결과 코드 결과 개체를 여러 번 처리하지 마십시오. – Blorgbeard
잘 잡습니다. 나는 using 문 안에서 코드의 첫 번째 줄에 steam = null 문을 옮겼다. 그리고 FXCop은 행복하다. 나는 아직도이 규칙의 팬이 아니다. –
경고는 없지만'stream = null'을 설정 한 후에'stream.ToArray()'에 접근 중입니다! – Blorgbeard