문제

System.드로잉 개체의 수명을 수동으로 관리해야 합니까?

현재 저는 브러시 및 기타 그리기 개체의 수명을 최소화하기 위해 'using' 문을 사용하고 있습니다.

using ( Brush br = new SolidBrush( color ) )
{
    // Do something with br
}

이것이 필요한가요, 아니면 필요할 때 가비지 수집기가 마법을 작동하도록 하는 것이 안전합니까?

질문을 잠시 제쳐두고 ...사람들은 이것을 달성하는 가장 깨끗한 방법이 무엇이라고 생각합니까?

도움이 되었습니까?

해결책

그것은이다 좋은 시스템을 처리하는 객체를 폐기하려면 예외가 발생할 때 한두 가지를 놓치면 세상의 끝이 아닙니다. (열린 파일 및 데이터베이스 연결과 같은 다른 객체 항상 폐기

코드 전체에“사용”명령문이 많이 있으면 이해하기가 더욱 복잡합니다. 그러므로 나는 System.Drawing Object의 경우, 고려하다 메소드의 끝에서 그들에게 dispose ()를 호출합니다.

과거에 나는“Dustcart”를 쓴 수업을 사용하여 idisposable을 구현하고 폐기 할 물체 모음이 포함되어 있습니다. 그런 다음 다음과 같은 코드를 작성할 수 있습니다.

using(var dustcart = new Dustcard())
{
   var p = dustcart.Add(new Pen(red, etc));
   var b = dustcart.Add(new Brush(black));

   Pen t;
   if (someFlag)
   {
      t = p;
   }
   else
   {
      t = dustcard.Add(new Pen(etc));
   }
}

다른 팁

객체가 idisposable이면 더 이상 필요하지 않은 즉시 처분하는 것이 좋습니다. (이유 때문에 idisposable을 구현합니다).

오프 코스, 당신이 처분하는 것을 잊어 버릴 때, 쓰레기 수집가는 언젠가는 일을하고 그것을 정리하여 자원이 풀리도록하지만, 쓰레기 수집가가 시작되는시기를 말하거나 추측 할 수는 없지만, 결정 론적이지 않습니다. .

따라서 내 조언은 다음과 같습니다. 더 이상 일회용 물체가 필요하지 않은 즉시 (지금하고있는 것처럼) 수동으로 처분하십시오.

일반적인 규칙은 객체가 idisposable을 구현하면 정리해야한다는 것입니다. Idisposable은 .NET 프레임 워크의 변덕에 구현되지 않습니다. 그 이유가 있어야할만한 이유가 있습니다.

다른 사람들이 말했듯이 : idisposable 객체를 만들 때 가능한 빨리 처분해야합니다. 특정 예에서는 컴파일 타임에 색상이 알려진 경우 폐기 할 필요가없는 Brush BR = Brushes.Blue와 같은 표준 브러시를 사용할 수 있습니다.

동일한 색상을 반복해서 재사용하는 경우 브러시를 클래스 레벨 멤버로 저장할 수 있지만, 이는 소유 클래스도 IDISPosible이어야하고 Dispose 메소드에 브러시 멤버를 처리해야 함을 의미합니다. 이렇게하면 메모리 스토리지가 하나의 브러시 크기로 증가하지만 코드의 양이 줄어들 수 있습니다 (명령문은 없지만 추가 폐기 재정의).

브러시, 펜, 글꼴 등 모든 리소스가 올바르게 폐기되도록 보장하기 위해 귀하의 질문에 설명된 대로 'using' 문을 사용하고 있습니다.내 코드에서는 명시적인 .Dispose() 호출이 전체적으로 흩어져 있는 것보다 using 문이 더 깔끔하다는 것을 알았습니다.하지만 그것은 단지 내 취향일 뿐입니다.

그래도 위의 답변에 동의합니다.명령문 사용을 선호하는지 .Dispose 호출 사용을 선호하는지에 관계없이 가비지 수집기에 의존하기보다는 리소스를 수동으로 정리하는 것이 매우 중요합니다.(처음에는 가비지 컬렉터에 의존하고 있었고, 앱이 복잡해지기 전에도 성능 문제가 표면화되기 시작했습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top