C#관련 오류들은 언제 해결이 될런지요
글쓴이 : danke 조회수 : 6119 작성일 : 2013-07-18
1번첨부 : 없음 2번첨부 : 없음 3번첨부 : 없음
안녕하세요.
C#을 이용해 프로그램을 만들었습니다.
단순하게 테스트 용도로 주문을 내고, 주문을 받고, 정정하고, 시세를 받고 이런 작업들은 문제가 없었는데
본격적으로 조금 복잡하게 프로그램을 만들고보니 문제가 발생하네요.
동일한 문제들이 2009년부터 발생하고 있었고

http://thegosu.com/template/index_20130404.html?m=2&s=3&pagegubun=1&mode=view&uid=640&search=comment%20&search_text=C#&start=

이 글과 동일한 문제를 겪고 있네요.

제가 대충 알아본바에 의하면
C#의 CLR에서 COM을 이용할 때 RCW(Runtime Callable Wrapper)라고 하는 프록시를 만들어서
구현을 하는거 같은데 C#내에 여러개의 COM 객체를 만들어 사용하면 RCW에서 내부적으로
하나의 COM 객체를 만들어 레퍼런스 카운트만 관리해서 재사용하는거 같습니다.
그리고 기본적으로 C#이 메모리를 GC를 통해 관리를 하구요.
뭔가 GC와 RCW를 이용한 COM의 사용이 꼬이는 느낌입니다.
그런데 타사의 다른 COM API를 사용시엔 문제가 없었던걸로 보아
C#쪽에서 원하는대로 GOM이 COM객체를 다루지 않는게 아닐까 싶은데..ㅠ
이 문제가 항상 재현 가능한게 아니라 문제가 발생하는 상황을 딱 꼬집어 설명드리긴 힘들지만
(이건 제 추측입니다. C#과 COM의 내부적인 메커니즘은 잘 몰라서..;; )
대충 어떤 함수에서 A라는 변수에 GOM의 GxTradeStore 관련 객체를 할당하면 CLR 내부적으로 RCW를 이용해
RCW 클래스 내부에 COM을 연결 시킵니다. 그리고 다른 스레드에서 어던 함수가 실행되며 B라는 변수에 RCW를 이용해 COM 객체를 할당하는데 RCW는 이미 COM을 연결시켜 놨으니 레퍼런스 카운트만 올립니다.
이렇게 실행이 되는 도중 A가 GC에 의해 해제될 상황이 발생하면 RCW에선 레퍼런스 카운트를 줄이고
나중에 B도 해제될 상황이 발생하면 RCW는 레퍼런스 카운트를 줄이는데 이게 0이 되면 COM의 연결도 해제합니다. 그런데 RCW내부에서 COM이 연결되고 해제되는 과정 혹은 레퍼런스 카운트가 증감하는 과정에서 GOM의 COM이 동작하는 과정에 표준을 따르지 않은 식으로 동작하는 부분이 있든지 혹은 C#에서 가정하는 과정(사실 COM이라면 특별히 C#에서만 요구하는 과정이 있을것 같진 않지만)과 어긋나는 부분이 있든지의 이유로
꼬인게 아닌가 싶습니다.
저도 제가 잘 아는게 아니라 좀 중구난방으로 추측성 글만 올렸는데 확실한건 여전히 문제가 있다는 것이고 이걸 사용자 측에서 해결할 방법은 없고 고수 쪽에서 해결해 주셔야 할 문제라는 겁니다.
(아, static하게 GxTradeStore 객체를 생성해서 해제되는 일이 없게 하면 GC에 의해 해제될 일이 없어서 그런지 에러가 안나고 돌아가는거 같긴 합니다. 다만 이렇게 코딩을 하는건 좀 무리가 있겠죠;;)
이번에 새로 신한금투쪽에서도 지원이 되는거 같은데 부디 해결 좀 해주셔으면 좋겠습니다.

전산쟁이 같은 일을 겪은 사람으로서 지나가다 우연히 게시판 타이틀을 보고 글을 남깁니다.
전 이미 잊혀진 일이라 여겼는데... 우선 수년이 지난 지금에도 고쳐지지 않았다면
코딩 수가 늘어나기 전에 얼른 판단하시기 바랍니다.
1. 동양증권을 꼭 이용해야한다: 이 경우라면 그냥 C#을 포기하고 다른 언어로 얼른 갈아타시길 바랍니다.
2. C#을 꼭 사용해야한다: 차라리 타증권사의 API를 이용하시는 것이 좋은 판단으로 봅니다.
전 같은 로직으로 돌아가는 프로그램을 두개의 증권사로 각각 만들어두었는데, 동양의 GOM의 단점은 고수와
함께 돌려야만 한다는 것이 제겐 가장 단점으로 남습니다. 단독실행할 수 있는 API를 쓰신다면 편리한 점이
로그인 문제부터 일일이 열거하기 힘들지만 매우 많습니다.
그나마 처음 접한 것이 GOM이라 애정으로 함께 가고있습니다^^
이상 주관적인 판단이었지만, 다른 분이 보셔도 나름 객관적인 현실입니다.
GOM의 발전된 모습을 기대하면서 글을 남겨둡니다.^^ (2013-07-19)
danke 이미 개발을 상당히 진행시켜놨는데 슬퍼지네요ㅎㅎ. GOM에서 제공되는 oop model이 편해서 쓰고싶었던건데 다른 쪽은 GOM 같은 형태로 제공되는 곳이 없겠죠? 델타익스체인지에서 손좀 써줬으면 좋겠네요 ㅠ (2013-07-19)

번호 제목 첨부 작성자 작성일 조회
867  MFC 와 Type Library.. JMLee 2015-02-02 8255
866  고수 연결 ping test [2] courant 2015-02-02 8402
865  누적체결량 조회 [1] beluga 2015-01-30 8447
864  선물, 옵션 종목의 월물 시작일을 알 수 있나요? [1] JMLee 2014-12-30 8613
863  "서버와 연결할수 없습니다."라는 메세지가 떠요 [2] 푸우 2014-11-03 7917
862  야간 선물 CME 주문 문의 [1] Lynn 2014-10-31 8002
861  지정가 동시 손익 손절 함께주문넣는방법좀 알려.. 김효원 2014-09-25 6403
860   Re : 지정가 동시 손익 손절 함께주문넣는방법좀.. Mercury 2014-09-26 8165
859  SymbolStore에서 GetAllSpreads()할때 지수선물.. [1] 거래자 2014-09-11 6554
858  GOM 에서 지원하는 언어는 [3] JMLee 2014-06-09 6380
857  예상체결가 조회 [1] 네오 2014-05-13 5912
856  다중접속에서 해당주문만 받고 싶다면 [1] 똘사마 2014-04-28 5033
855  GxOrders 이벤트 수행여부 [4] 인사동 2014-04-02 5845
854  갭보정차트를 가져올 수 있나요? [1] 데칸 2014-02-07 5247
853  시세 입수 시간의 밀리세컨은 알수 없나요? [1] 똘사마 2014-01-10 5818
852  [동양고수]오늘아침부터 GOM 관련기능이 동작하.. [1] 노딜 2013-12-27 5329
851  예상체결가는? [1] 똘사마 2013-12-17 4960
850  투자자별 매매 상황 [1] 박창선 2013-12-05 5147
849  투자자동향 데이타는 제공하나요? [1] 똘사마 2013-11-24 4769
848  아래 글에 이어서 다시한번 질문 드립니다. [1] 데칸 2013-11-20 4546
847  신한 곰 키보드보안 질문드립니다. [1] 데칸 2013-11-20 5037
846  선물 분봉 차트 수신시 미결제 약정이 0으로 나.. [1] 거래자 2013-11-19 6297
845  GxSymbol.IsATM은 전일기준입니까? [1] 인사동 2013-11-05 4389
844  VB로 프로그램을 만들어 실제 트레이딩중입니다... [1] 변현우 2013-10-25 7587
843  응답 에러 문의드립니다. [1] 데칸 2013-10-18 5217
842  가상게좌와 실제계좌의 사이... [1] JMLee 2013-10-02 5961
841  ......... [1] 트레이더7 2013-09-30 4628
840  신한고수도 API 지원하는지요 ? [2] 네오 2013-09-23 5517
839  한pc에 2개의 프로그램을 실행하면 정상동작 하.. 데칸 2013-09-15 5380
838  C#관련 오류들은 언제 해결이 될런지요 [2] danke 2013-07-18 6120
837  장 시작 이벤트 있는지요.. [1] 박창선 2013-07-07 4956
836  vba 옵션 종목별 가격 1차 매수 매도 호가 GxMu.. [1] 페트병 2013-06-28 5234
835  vs2010 차트이벤트 [1] courant 2013-06-13 5472
834  주문 요청 관련 질문있습니다! [1] 변현우 2013-04-05 4480
833  고수 프로그램 시작시 시작선택이 안나오게 할 .. [1] JMLee 2013-03-21 5474
 1  2  3  4  5  6  7  8  9  10