c# String 잔기술들 1

String과 string의 차이 String은 클래스이고 string은 변수형이다. 그러나 아래 예제를 보면 이들 사이에 차이가 없다는 걸 알 수 있다. string은 변수형인데 new로 만들 수 있고 String은 클래스인데 new 없이 그냥 쓸 수 있다. 이들은 이렇게 변수형과 클래스 모두의 기능을 한다. 더 정확하게는 string이 String의 껍데기다. string is an alias for System.String in .NET.– Built-in reference…

c# List 잔기술들 1

TextBox로 한꺼번에 출력하기 리스트의 아이템들을 TextBox에 출력할 때 한 줄씩 하면 느리다. 아래와 같이 한꺼번에 하면 빠르다. Environment.NewLine은 “\r\n”이라고 해도 된다. 전자는 후자를 호출하므로 후자가 더 빠르다. 아이템 순서 바꾸기 List에는 move 메떠드가 없다. ObservableCollection에는 move가 있지만 바인딩을 할 게 아니라면 List가 더 빠르므로 굳이 ObservableCollection를 쓸 필요는 없다. 어차피 move도 아래와 같은 방법으로 작동한다….

c# WndProc으로 윈도우즈 메시지 제어하기

WndProc 메소드 WNDPROC은 win32 api에 들어 있는 콜백 함수이며 .네트의 Control.WndProc 메써드로 wrap되어 있다. 다른 환경에서 이용되는 메써드 등을 자신의 환경에서 이용할 수 있게 가공하는 걸 wrap한다고 한다. ‘포장한다’는 뜻이다. 콜백 함수란 이벤트 실행 함수를 말한다. callback은 ‘답신’을 뜻한다. 내가 아무개에게 전화를 했는데 그가 받으면 용건을 말하고 끊으면 된다. 그러나 전화를 했는데 그가 없고 다른…

증권회사 api 선택시 고려 사항

속도 com은 쉽게 이용할 수 있는 대신 느리다. com은 component object model의 머리글자인데 이름만 봐서는 이해하기가 어렵다. 마이크로소프트는 여러 플랫폼들 사이에서 쉽게 데이터를 오가게 하기 위해 이걸 만들었지만 실패했다. 지금은 윈도우즈 안에서만 일부 애플리케이션들 사이에서 데이터 전송을 하는 데에 이용된다. 윈도우즈 중급 이상 수준이 되는 사람이라면 ole는 들어봤을 거다. com, ole, 액티브x, ocx는 사실상 모두…

c# lock으로 멀티뜨레드 대이터 래이스 막기

대이터 래이스 아래의 예제는 일부러 data race가 일어나게 한 거다. 동시에 두 개의 뜨레드에서 하나의 리스트에 대이터를 쓴다. 그 결과 리스트 값들은 듬성듬성 빠져 있다. 하나의 뜨레드에서 쓰기 작업을 끝내기 전에 다른 뜨레드에서 덮어쓰기 때문이다. lock으로 동기화 리스트에 쓰는 부분을 아래와 같이 lock으로 둘러싸면 대이터 래이스는 일어나지 않는다. 먼저 lock에 다다른 리스트에 대한 쓰기 작업이…

c# DateTime과 TimeSpan으로 날짜와 시간 제어하기

DateTime .네트의 날짜와 시간은 델파이의 그것들에 비하면 좀 특이하다. 델파이의 날짜와 시간은 모두 double인데 .네트의 DataTime은 구조체이며 이거로는 제어를 충분히 할 수 없어서 TimeSpan이라는 구조체도 같이 써야 한다. DateTime은 시점이고 TimeSpan은 길이다. double에 비해 구조체의 용량이 더 크고 작동에도 부하가 크겠지만 그 차이가 얼마나 될지는 모르겠다. .네트의 구조체는 인스턴스가 만들어진 때 그 크기가 특정되지 않으므로…

c# 멀티뜨레드 문제들, 뜨레드 안전성, 크로스-뜨레드, 데이터 레이스

멀티뜨레드는 동시에 이루어지는 작업들이다. 하나의 객체에 담겨 있는 데이터를 여러 뜨레드들에서 동시에 읽는 거는 문제될 게 없는데 동시에 쓰려고 하면 문제가 될 수 있다. 한 뜨레드에서 데이터를 쓰는 작업을 ‘마치기’ 전에 다른 뜨레드에서 기록을 한다면 이들은 서로 충돌할 수 있기 때문이다. 이런 문제는 세 가지 형태로 나타난다. 뜨레드 안전성 아래의 예제는 하나의 DataTable 셀에 객체를…