Dispose 패턴에 Parallel.For 사용시 느려지나요?

안녕하세요.

Dispose 패턴만든 클래스에 Parallele.For 를 사용하여 윈폼을 개발 했는데
프로세스를 다시 시작하여 구동하면 처리속도가 느려지는데 왜 그런걸까요?

제가 완벽하게 DIspose 패턴을 이해하고 만든게 아니여서 실수가 있는거일수도 있긴한데…
제가 만든 코드를 예시로 작성해두겠습니다.

class Pattern : IDisposable
{
   private bool alreadyDisposed = false;

   public void Dispose()
   {
    ....
   }

  protected virtual void Dispose(bool isDisposing)
  {
        try
        {
            // Dispose 는 한번만 수행되도록 한다.
            if (alreadyDisposed) return;

            if (isDisposing)
            {
                ...                
            }

            alreadyDisposed = true;
        }
        catch (Exception ex)
        {
           throw;
        }
    }

}





using (Pattern pattern = new Pattern())
{
  Parallel.For(0, 100, idx =>
  {
     ....
  });
}

해당 처럼 코드를 하면 이슈가 있을까요?

1개의 좋아요

글쎄요. Dispose 사용과 관련이 없을것 같은데요, Dispose를 구현하지 않으면 속도가 빨라지나요?

1개의 좋아요

Dispose에 무거운 처리를 해놓고 자동 호출 된다면
느려질 수 있지 않을까요?

가령 (제가 윈폼은 안해본지 오래 되서 확실하지 않을 수 있습니다)
윈폼 컨트롤인 경우 컨테이너가 폐기 될때 자동으로 Dispose()처리가 되는 걸로 알 고 있습니다.
이런 상황일때 영향이 있을 수 있지 않을까 추측해 봅니다.


그런데., Dispose는 비관리 자원을 해제 처리 하는 용도로 직접 구현하는데
어떤 이유로 Parallele.For 처리를 하는지지 궁금하네요

1개의 좋아요

Kafka 연동을 하고 있는데 따로 Class 로 만들어서 진행하고 있는데 broker를 3개로 나뉘어서 보내야하는데 Parallele.For 안에서 Kafka 연동 시 하나의 broker 에게 만 담겨져서 그렇습니다.

1개의 좋아요

Kafka flush() 처리를 Dispose 부분에 처리하도록 수정했더니 이슈 해결되었습니다!!

3개의 좋아요