c# for와 foreach 성능 비교
foreach는 편하지만 느리다. 다섯 번 평균하니 for가 19, foreach가 24 나왔다. 그렇다고 for가 능사는 아니다. dictionary에서 루프를 돌리려면 foreach를 써야 한다.
foreach는 편하지만 느리다. 다섯 번 평균하니 for가 19, foreach가 24 나왔다. 그렇다고 for가 능사는 아니다. dictionary에서 루프를 돌리려면 foreach를 써야 한다.
클래쓰를 리스트에 담아 하는 경우와 같다.
파일을 읽으려 하는데 그 대상이 없으면 오류로 처리되어 멈춘다. try ~ catch 구문으로 예외 처리를 할 수 있지만 이 방법은 원인을 알 수 없거나 작동이 멈추는 상황을 절대적으로 막아야 하는 경우에만 최후의 수단으로 써야 한다. 특히 이 구문은 부하가 크기 때문에 루프에서는 이용하지 않는 게 좋다. 제일 좋은 방법은 File.Exists 메떠드를 이용하여 조건문으로 사전 처리를…
배열을 특정한 값 하나로 채워야 할 때가 있다. 아래와 같이 array.fill 메떠드를 이용한다.
아래 코드는 마우쓰 포인터가 있는 위치에서 왼쪽 버튼을 클릭하게 하는 예제다. 버튼을 누른 뒤에는 반드시 떼어야 클릭이 된다. 아래 코드는 c++ 문법이다. DWORD는 UInt32로 ULONG_PTR는 IntPtr로 바꾼 거에 유의한다. 0x0002와 0x0004는 상수 변수들인 MOUSEEVENTF_LEFTDOWN과 MOUSEEVENTF_LEFTDOWNUP의 값들이다. 상수로 선언해서 써도 되고 위와 같이 그냥 써도 된다. 다른 패러미터들은 mouse_event function (winuser.h)에서 확인할 수 있다.
아래 예제는 마우쓰 포인터를 모니터의 특정 위치로 가게 하는 예제다. 패러미터들은 각각 x와 y의 좌표이며 x 값이 음수인 건 매인 모니터의 왼쪽 모니터 값이기 때문이다. 아래 코드는 c++ 문법이다. .네트에서 호출할 때 [in]은 무시하고 쓰지 말아야 하는 거에 유의한다.
아래의 코드는 마우쓰 포인터의 위치를 구하는 예제다. 포인터가 폼을 벗어나도 구할 수 있고 모니터가 여러 대일 때에도 가능하다. GetCursorPos 함수는 .네트에는 없고 win32 api에 있다. 델파이는 user32.dll을 랩wrap해 둬서 user32.dll에 있는 여러 함수들을 쉽게 쓸 수 있지만 .네트는 같은 회사 제품들임에도 더 번거롭게 되어 있다. 아래와 같이 직접 불러다 써야 한다.
아래의 코드는 아래 애플리캐이션이 실행되는 동안 cpu를 얼마나 사용하는가 구하여 출력하는 예제다. 애플리캐이션이 실행되는 동안 cpu 부하를 관찰할 때 요긴하다. 디버그 환경이라면 비주얼 스투디오로 쉽게 확인할 수 있지만 릴리스 환경이라면 윈도우즈의 작업 관리자를 이용하든지 아래와 같이 해야 한다. 번거롭게 아래와 같이 하는 이유는 물론 그 결과를 가공하기 위해서다. 비록 비주얼 객체를 제어하여 cpu의 사용률을 출력하지만…
.네트에는 세 개의 타이머들이 있다. system.windows.forms.timer는 디자인 모드에서 툴박스로부터 끌어다 쓸 수 있다. 제일 흔하게 이용된다. 매인 뜨레드에서 작동하므로 비주얼 객체들을 제어할 때 편하다. 하지만 매인 뜨레드에 부하를 더한다. system.timers.timer는 멀티뜨레드로 작동한다. 비주얼 객체들을 바로 제어하려 하면 크로쓰-뜨레드 예외로 처리된다. 이런 문제를 피하려면 invoke를 이용해야 한다. 비주얼 객체들을 제어하는 것보다는 부하가 큰 작업을 할 때…