본문 바로가기

반응형

전체 글

(186)
리플렉션 Reflection (1) 리플렉션 Reflection 리플렉션은 프로그램이 동적으로 소스 코드를 해석할 수 있게 하는 기술이다. Activity나 Service 같이 특정 이름 규칙으로 클래스를 작성하면 개발자가 코드로 객체를 생성하거나 연결하지 않아도, 프로그램 내에 등록되고 사용할 수 있었던 마법의 원리는 프레임워크가 리플렉션 기술을 사용해 클래스의 이름을 바탕으로 클래스를 생성/관리/제거해주기 때문입니다. 객체를 프레임워크가 관리해주기 때문입니다. 객체를 프레임워크가 관리해주니가, 개발자는 프레임워크에게 요청하면 언제 어디서나 안정적으로 원하는 클래스를 얻을 수 있습니다. 즉 개발자는 클래스로 객체를 생성하는거나, 객체를 사용할 수 있게 준비하는 일정 부분을 프레임워크에게 믿고 맡길 수 있게 됩니다. public class..
덤프 파일 사용 방벙(.pdb 디버깅) 프로그램이 죽을 경우 덤프 파일 만들기 1. 솔루션 탐색기 - 프로젝트 우 클릭 - 추가 - 기존 항목 - MinidumpHelp.cs 추가 dbghelp.dll 파일은 윈도우에 기본적으로 설치돼있지만 배포할 컴퓨터에 없는 경우 실행 파일과 함께 배포 2. 컴퓨터의 운영체제와 동일한 솔루션 플랫폼으로 반드시 변경 솔루션 플랫폼이 없을 경우 : 구성 관리자 - 활성 솔루션 플랫폼 - 새로 만들기 64bit 운영체제의 경우 솔루션 플랫폼을 x64로 변경하여 빌드 Any CPU 불가 3. 소스 //Program.cs에 추가 namespace WindowsFormsApplication1 { static class Program { //이벤트 클래스(UI 예외) static void exceptionDump(ob..
병렬 프로그래밍 Parallel Programming (2) - 작업 병렬화 작업 병렬화 Task Parallelism 작업 병렬화는 일반적으로 생각하는 병렬 처리를 하는 방식입니다. 작업 병렬화는 데이터 병렬화와 달리, 데이터마다 동일한 처리를 하는 방법이 아닌, 독립적인 작업들을 동시에 처리하는 방식입니다. 데이터 병렬화와 마찬가지로 작업 병렬화도 TPL이 개발자를 대신하여 스레드를 관리합니다. 따라서 개발자는 병렬 프로그래밍을 Parallel.Invoke 메서도를 사용해 아래와 같이 손쉽게 구현할 수 있습니다. Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork()); 예제 코드는 Parallel.Invoke 메서드로 DoSomeWork() 과 DoSomeOtherWork()을 병렬로 처리하고 있습니다. 코드의 내부 동작을..
병렬 프로그래밍 Parallel Programming (1) - 데이터 병렬화 병렬 프로그래밍 Parallel Programming 병렬 프로그래밍은 비동기 프로그래밍이 아니다! 병렬 프로그래밍과 비동기 프로그래밍 모두 컴퓨터에게 제일 중요한 자원인 중앙처리장치(CPU)를 효율적으로 사용하기 위한 기법입니다. 다만 중앙처리장치를 효율적으로 사용하는 방법이 다를 뿐입니다. 병렬 프로그래밍은 작업을 분할 정복합니다. 반면 비동기 프로그래밍은 코드 흐름을 유연하게 변경합니다. 병렬 프로그래밍에서 주의할 점 소스 코드에 따라 병렬 처리가 적합하지 않을 수 있다. 특히 병렬 처리를 위해 드러나지 않는 사전 작업이 굉장히 많다. 따라서 단순한 작업을 위해 병렬 처리하는 건 오히려 실행 속도를 저하시킬 수 있다. 그리고 실행을 필요 이상으로 복잡하게 하여 디버깅을 어렵게 하기도 한다. 따라서 ..
운영체제에서 제공하는 다양한 동기화 장치들에 대한 설명 동기화 설명 예 뮤텍스 공유 자원에 대해 오직 하나의 스레드 접근만 허용 acquire(&mutex); // 공유자원 잠금 Func(); // 임계 구역 Releaase(&mutex); // 공유자원 해제 세마포어 공유 자원에 대해 여러 개의 스레드가 동시 접근 가능 P(S) { // P연산 (임계 구역에 들어가기 전 수행) while S
Task와 Thread 차이 프로세스(Process)와 쓰레드(Thread) 프로세스는 실행 파일이 실행되어 메모리에 적재된 인스턴스입니다. 운영체제는 여러가지 프로세스를 동시에 실행할 수 있는 능력을 갖추고 있습니다. 즉 컴퓨터로 Youtube에서 노래를 들으면서 코딩을 할 수 있습니다. 그런데, 프로세스도 한 번에 여러가지 작업을 수행할 수 있습니다. 쓰레드는 운영체제가 CPU 시간을 할당하는 기본 단위인데, 프로세스는 하나 이상의 쓰레드로 구성됩니다. 쓰레드의 장점 - 사용자 대화형 프로그램에서 응답성을 높일 수 있다.(프로그램이 무슨 일을 하고 있을 때 대기 할 필요없이 다른 일을 진행할 수 있다) - 멀티 프로세스 방식에 비해 멀티 스레드 방식이 자원 공유가 쉽다.(프로세스끼리 데이터를 교환할 때 IPC(Inter Proc..
비동기 프로그래밍 비동기 프로그래밍 비동기 프로그래밍은 중앙처리장치(CPU)를 효율적으로 사용하기 위한 기술이다. 중앙처리장치는 매 초마다 정말 많은 작업을 요청받고 처리한다. 데이터를 읽거나 쓰거나, 네트워크 통신을 주거나 받거나, 화면 픽셀을 계산하거나 모두 중앙처리장치의 허가와 지도가 필요하다. 이렇게 바쁜 중앙처리장치에게 현재 입출력 작업이 완료되길 기다리게 하는 건 정말 비효율적이다. 그래서 개발자는 중앙처리장치가 비효율적으로 낭비되지 않도록 비동기 프로그래밍 기술을 사용하여, 중앙처리장치가 입출력을 기다리는 대신 다른 업무를 처리하도록 하고 입출력이 완료되었다는 메세지를 받은 뒤에 기존 작업을 다시 시작하도록 프로그래밍한다. 등장 배경 기본적으로 프로그램은 코드 순서에 따라 순차적으로 실행된다. 그래서 코드 중..
32bit DLL을 64bit .Net 프로그램에서 호출하기 [문제] WPF App에서 모듈을 사용중이다. 모듈이 32bit DLL로 되어져 있다. 그래서 현재 빌드 구성을 AnyCPU의 32비트 기본 사용으로 하고 있다. 그런데 32bit로 프로그램이 실행되다 보니 메모리 부족 문제가 발생되는 것 같아서 WPF 빌드 구성을 64비트로 변경 후 빌드하니 32비트 모듈 DLL이 정상적으로 호출되지 않는 것 같은데 64비트 닷넷 프로그램에서 32비트 네이티브 DLL을 import해서 정상적으로 호출할 수 있는 방법이 있나요? [방안] 1. 없다. 대신 우회 방법으로 모듈을 사용하는 별도의 exe를 32비트로 만들고 그 프로세스를 필요할 때마다 실행한 후 WPF App과의 통신을 소켓 등으로 처리할 수 있다. 그건 그렇고,.. 웬만한 규모의 프로그램이 아니고서는 아무리..

반응형