c#

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

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

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

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

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

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

  • c# List.RemoveRange 부하

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

  • c# List와 LinkedList 이터래이트 성능 비교

    모든 프로그래밍 언어들에서 List는 메모리의 연속된 공간을 차지하고 LinkedList는 그렇지 않다. 메모리의 연속된 공간을 차지한다는 건 그 크기가 늘어날 때 통째로 복사를 할 새로운 공간이 있어야 하고 그 자리에 내용 전체를 복사한다는 의미로 대충 생각해 봐도 부담스러운 작업이다. 그러나 이런 구조에서는 이터래이트와 랜덤 액세스가 무척 빠르다. 반대로 연속된 공간을 차지하지 않는 경우에는 각 아이템이 그…

  • c# DataGridView.DataSource 바인드 뒤 칼럼 속성 유지하기

    DataGridView가 기본으로 설정되어 있는 상태에서는 칼럼의 헤더를 가운데로 얼라인해도 헤더 텍스트는 한가운데에 출력되지 않고 왼쪽으로 쏠려 나온다. 칼럼은 기본적으로 쏘트를 할 수 있게 설정되어 있다. 칼럼 헤더를 클릭하여 쏘트를 하게 되면 헤더의 오른쪽에 삼각형의 아이콘이 만들어지는데 이게 출력될 자리가 확보되어 있다. 따라서 칼럼 헤더를 한가운데에 나오게 하려면 쏘트 기능을 못 쓰게 설정해야 한다. 아래는 쏘트…

  • c# DataTable과 List의 인덱스 액세스 성능 비교

    테이블 형태의 데이터를 이용해야 할 때 DataTable과 List 가운데 어느 걸 써야 할지 고민스러울 수 있다. 클래스를 만들어 List에 넣어 이용하는 거보다 DataTable을 쓰는 게 더 편하지만 느리다. 그렇다면 얼마나 느릴까? 아래는 인덱스를 안다는 전제 아래 인덱스로 액세스하여 데이터를 읽는 데 걸리는 시간들을 측정하는 예제다. 웜-업을 제외한 다섯 번씩의 평균은 DataTable이 859,208이고 List가 75,545로 열…

  • c# 문자열을 출력할 때 언더스코어가 사라지는 문제

    ‘_’를 underscore라고 한다. 이 문자를 출력하려 한 때 드물게 이게 사라져서 보이지 않을 때가 있다. 문자열 처리를 틀리게 해서 그런가 코드를 암만 살펴봐도 답은 나오지 않는데 이 문제는 비주얼 컨트롤의 높이가 너무 좁아서 그런 거다. 언더스코어는 일반적인 문자들보다 아래에 그려진다. 그래야 문자와 겹치지 않고 문자 아래에 밑줄로 보이기 때문이다. 예를 들면 이렇다._ a 가언더스코어와 문자에…

  • c# fractional second가 있는 TimeSpan 출력하기

    .네트의 시간은 초 아래에 일곱 자리의 시간이 더 있는데 이걸 fractional second라 하며 hh:mm:ss.fffffff로 표기한다. millisecond는 1/1,000초이므로 적어도 논리적으로는 이거보다 더 정밀한 값이다. 그러나 사실적으로는 그렇게까지 정밀하게 작동하지는 않는다. TimeSpan을 출력할 때 이 fractional second가 문제될 수 있다. 아래는 TimeSpan을 출력하는 기본적인 예제다. 그런데 초까지만 출력해야 할 때도 있지만 아래의 예제는 작동하지 않는다. 아래와 같이…