C# Invoke의 딜레이

  회사에서 서버와 클라간 통신 프로그램을 하나 짜는데 왠지 모르게 서버에서는 분명 제대로 1초에 약 16KB의 데이터를 정상적으로 보내는데도 불구하고 클라이언트에서 매 수신당 1초~1.5초의 딜레이가 생겨서 왜 그러나 찾아보니 어처구니 없는 실수를 했단 사실을 깨달았습니다.

  서버에서 클라로 1초마다 16KB정도의 XML 데이터를 쏘는데, 데이터 엘리먼트가 약 90~110개 사이로 날아오고 이것을 파싱해 각 데이터 요소를 차트에 그려주는 작업을 클라이언트가 하게 되는 구조로 프로그램이 작성돼 있는데 루프를 돌기 전 Invoke를 호출하고 끝날 때 해제했어야 하는 것을 루프 안에서 매 데이터를 처리할 때마다 Invoke를 호출하는 구조로 작성했던 것입니다. 하하... 미친...

  때문에 초당 100번, 그것도 차트에 호출하는 동안 딜레이가 생겼고, 그 와중에도 소켓은 별도의 스레드에서 돌아가고 있기 때문에 소켓 버퍼는 데이터가 계속 쌓이고 있었죠. 그 결과 초당 1초에서 1.5초의 딜레이가 10초, 1분, 10분, 한시간동안 쌓이게 되고... 결국 더 이상의 자세한 설명은 생략한다.

  Invoke를 루프를 돌기 전 걸어주니 완벽하게 해결됐습니다. C# Inovke의 딜레이 문제 앞으로 잘 생각해야겠네요...

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

테일즈위버 OST 전곡 모음

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?