ls증권 dll api WinUi SetWindowLong SetWindowSubclass 성능 비교

winui로 윈도우 메시지를 처리하는 데에는 크게 네 가지 방법이 있다. 이들 가운데 누게트 설치를 하지 않는 게 둘이다. 일반적으로 누게트 패키지를 이용하면 더 편하지만 느리다. 바로 win32 api를 이용하는 게 더 원초적이고 더 빠르다. 대신 코드가 더 난잡해질 수 있지만 아래의 경우에는 그렇지도 않다. 간단하다.

테스트할 두 메떠드는 SetWindowLong과 SetWindowSubclass이다. 전자는 윈도우즈 폼즈와 비교할 때 썼던 거다. 제일 원초적이고 조금 까다로운 대신 가장 빠르다. SetWindowSubclass는 좀 더 완성된 형태로 나중에 나온 거다. 마이크로소프트는 공식적으로 후자를 쓰라 한다.

The following list points out some of the disadvantages of using the previously described approach to subclassing a control.
Subclassing Controls

문제는 성능 차이다. 수천 개 종목들의 실시간 대이터를 처리하다 보면 조그만 성능의 차이가 큰 결과 차이를 부른다. cpu 사용률이 크게 오르거나 SendMessage로 보낸 게 사라지는 경우도 흔하다. ls증권이건 키움증권이건 내가 com api를 쓰지 않는 이유다.

오늘 코스피와 코스닥 모든 종목 4,305개의 체결, 호가, 프로그램 매매, 거래원 대이터를 9시부터 10시까지 실시간으로 받았다. 한 컴퓨터에서 동시에 실행했다. System.Timers.Timer를 이용해 매 초 ConcurrentQueue에 cpu 사용률과 누적 처리 패키트 수를 저장했다.

SetWindowLong로 처리한 결과 cpu 사용률은 평균 3.11% 누적 처리 패키트 수는 15,472,640개 였다. SetWindowSubclass로는 3.23%와 15,472,025개였다. 후자가 더 낮은 성능을 보였지만 그 차이에 특별한 의미는 없는 정도다.