c#

  • c# 레퍼런쓰 타잎 객체를 뜨레드의 아규먼트로 이용할 때 주의할 점

    레퍼런쓰 타잎 객체를 뜨레드의 아규먼트로 이용하면 뜨레드에서 처리되는 동안 객체의 값이 바뀐 경우 뜨레드가 전달 받은 객체가 아닌 바뀐 객체가 뜨레드 안에서 이용되는 문제가 생긴다. 예를 들어 WndProc으로 윈도우즈의 특정 메씨지를 잡아서 이걸 아규먼트로 하여 뜨레드를 만들어 돌리는 경우를 생각해 볼 수 있다. 이베스트투자증권의 api를 이용하여 주식 등의 가격을 처리할 때가 이렇다. 삼성전자의 현재 가격을…

  • c# 대이터 래이스를 막는 lock의 유효 범위

    아래의 코드는 대이터 래이스를 일어나게 하는 예제다. start debugging을 하면 오류로 인해 실행되지 않고 start without debugging을 하면 대이터 래이스를 확인할 수 있다. 위 예제에서 TestClass1은 서로 다른 뜨레드에서 실행되는 서로 다른 메떠드로 보내진다. 서로 다른 뜨레드에서 실행되는 하나의 메떠드에서는 lock으로 쉽게 대이터 래이스를 막을 수 있지만 위와 같은 경우에도 그럴까? 그렇다. 아래의 코드는 대이터…

  • c# 변수를 파일로 읽고 쓰기 – application settings

    애플리캐이션을 만들다 보면 많은 변수들이 쓰인다. 변수들 가운데에는 애플리캐이션을 종료한 때 파일로 저장했다가 애플리캐이션을 다시 실행한 때 그대로 불러다 읽어서 써야 하는 것들이 있다. 이 과정은 개념적으로 간단하지만 구현하려면 까다롭고 번거롭다. 일반적으로 변수에는 이름을 붙여서 쓴다. 리스트나 배열의 아이템을 변수로 이용할 수도 있지만 이렇게 하면 이름이 아닌 인덱스로 접근해야 하므로 실수를 할 가능성이 크다. 변수의…

  • c# 프로젝트가 바이러스로 인식되는 문제의 해결 방법

    c#도 그렇고 델파이도 그렇고 애플리캐이션이나 라이브러리를 빌드하면 바이러스로 인식되는 경우들이 흔하다. 이런 경우 대부분은 바이러스 검색 로직의 문제로서 여러 검색 프로그램들 가운데 일부만 그렇게 잡아 내기 때문에 무시하고 그냥 쓰면 되는데 그 일부에 윈도우즈 디펜더가 포함된다면 문제가 좀 달라진다. 무시하기가 힘들기 때문이다. 이런 경우 프로그램을 이용하는 입장에서는 백신 프로그램이나 윈도우즈 디펜더에서 해당 파일을 예외로 처리하게…

  • 증권회사 api 체결 대이터와 호가 대이터의 수신 순서

    주식 등이 체결되면 체결 대이터가 만들어지며 호가 대이터는 변한다. 이들은 논리적으로 동시에 일어나므로 한국거래소와 증권회사 등은 멀티뜨레드로 처리할 수 있다. 그러나 실제로 받아 보면 주로 체결 대이터 – 호가 대이터의 순서로 수신된다. 한국거래소가 어떻게 처리를 하는지는 모르나 내가 테스트한 이베스트투자증권은 싱글 뜨레드로 처리하고 있다. 문제는 이렇게 동기 처리를 해도 그 순서대로 클라이언트가 받는 건 아니라는…

  • 비주얼 스투디오 c# 디버그와 릴리스 빌드의 차이와 주의할 점

    릴리스 빌드를 한 때 주의할 점 디버그 빌드는 말 그대로 디버그를 하기 위한 거고 릴리스 빌드는 배포를 위한 거다. 디버그 빌드와 릴리스 빌드 사이에는 큰 차이가 없다. 비주얼 스투디오에서 디버그를 실행하는 거와 릴리스 빌드 사이에 큰 차이가 있을 뿐이다. 아래에 다루는 내용은 디버그 빌드가 아니라 비주얼 스투디오에서 디버그를 하는 경우다. 프로그램을 만들다 보면 대부분의 경우…

  • c# 모들(modal) 폼 만들기

    modal form이란 다른 폼으로 제어권을 넘겨주지 않는 폼을 말한다. modal은 mode의 형용사로 mode는 ‘특정한 상태’를 뜻하고 modal은 ‘실행 방법이 지정된’이라는 의미다. 모들 폼에서 벗어나려면 모들 폼을 종료해야 한다.

  • c# List.RemoveRange 부하

    이베스트투자증권의 api를 이용하여 코스피와 코스닥 합해 2,500개 정도 종목들의 체결 데이터와 호가 데이터를 수신하여 List에 담고 있다. 약간의 필터링을 하긴 하지만 그래도 그 양은 상당하다. 장이 끝날 무렵 1gb를 넘는다. 이렇게 수신하는 건 저장하기 위한 게 아니라 연산을 위한 것인데 대개의 경우 연산은 최근 한 시간 정도의 대이터를 대상으로 한다. 따라서 수 시간 전의 리스트…