RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
- 시작전 잡설 : 참으로 오랜만의 포스팅이네요^^; 요 근래 두어달간 몇가지 흥미진진한(그만큼 구글링도 엄청한) 프로젝트를 진행하느라 좀 바빴는데, 다시 블로그에 관심을 가져줄까 합니다. (뭐, 기다리시는분은 없었겠지만-_-;;)

- 상황 : 부서내 다른팀(개발이 아닌)에게 업무에 사용할 툴을 만들어 주는데, 이것저것 참조된 어셈블리를 같이 배포했더니, 불편하다고 파일하나만 가지고 실행할 수 없겠냐고 합니다. (엑셀에, DB접속에, 각종 UI들까지 몇가지 있깄했죠.) 그래서 구글님께 물어보니, 아니나 다를까 ILMerge 라는 툴이 있었고, Microsoft 공식 사이트에서 배포중이었습니다.

- 다운로드 : ILMerge.msi

- ILMerge 를 설치하면 기본적으로 c:\Program Files\Microsoft\ILMerge 에 설치가 되며, ILMerge.exe 라는 단독 콘솔형 실행파일 하나만 존재합니다.

- 기본적인 사용법만을 알려드리자면, 메인이 될 dll 명을 맨 앞에 적어주고, 나머지를 뒤에 줄줄이 적어주면 됩니다. 그리고 결과물이 생성될 파일명을 /out 파라메터와 함께 적어줍니다.

ILMerge.exe "/out:MergedAssembly.exe" "MergeTest.exe" "c:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Excel.dll"

- 위는 엑셀을 참조추가한 경우에 인터롭어셈블리를 같이 배포하지 않아도 되도록 묶어본 예입니다.(실제 사용시에는 배치파일로 만들어두면 편하겠죠)

- 이 툴이 유용한것중 하나는 pdb 파일도 함께 생성해주기 때문에, 디버깅에도 유용하다는 점입니다.

- 또 한가지, 이 툴의 실행파일또한 닷넷 어셈블리이기 때문에 참조추가하여 사용할 수 있는데, 참조추가하게 되면, ILMerge.exe 가 제공해주는 모든 기능을 프로그래밍적으로 사용할 수 있습니다. (해당 내용은 설치시 제공되는 문서에 자세히 나와있습니다. 본 포스팅에서는 다루지 않습니다.)

- 제공되는 문서의 서론에서 언급하고 있는것들 몇가지
  - ILMerge.exe 는 여러개의 닷넷 어셈블리를 하나로 묶어준다.
  - 비관리 코드를 사용하는 일부 어셈블리는 묶지 못할 수도 있다.
  - PEVerify 유틸(닷넷 기본제공)을 통해 어셈블리가 유효한지 검증한 후 사용할 것을 권장한다.
  - 윈도우즈 플랫폼만 지원한다.

- 사용법또한 간단해서 소개하는 수준에서 마무리합니다. 몇몇 돌발상황(?)에 유용하게 쓰였으면 하네요^^
2009/07/27 13:52 2009/07/27 13:52
http://lemonwidz.com/tc/trackback/24
CLR Via C# 2nd Edition 을 읽는 도중 흥미로운 부분이 있어 기록해 놓는다.

요지는 관리 코드인 경우 IL -> JIT -> Native Code 단계로서 최종적으로 C++과 같은 Native 코드를 생산해 내지만, 중간 단계인 JIT 에서 속도의 저하가 일어난다 라고 사람들은 알고 있다. 하지만, JIT 의 경우 Native 코드로 컴파일할때 현재 실행환경(CPU, 32, 64비트 환경 여부 등)을 정확하게 파악하고 있으므로, 항상 해당 환경에 최적화된 Native Code 를 생산해준다..... 라는것! 일리 있어 보이는데?

믿기 힘들겠지만 필자를 포함한 많은 사람들은 비관리 어플리케이션보다 관리되는 어플리게이션이 더 빠르다고 생각한다. 이에 대한 근거는 많이 있다. 예를 들면, JIT 컴파일러는 IL코드를 네이티브 코드로 컴파일할 때 어플리케이션의 실행 관경에 대해서 비관리 컴파일러보다 훨씬 더 자세하고 정확하게 알고 있다. 다음은 관리 코드가 비관리 코드보다 성능이 우수할 수 있는 몇 가지 근거이다.

  • 컴파일 시에 JIT 컴파일러는 실행 환경이 펜티엄4 CPU 라는 것을 알 수 있고 또 펜티엄4 CPU라는 것이 확인되면 이에 최적화된 지시어를 이용해서 네이티브 코드를 생성함으로써 성능을 향상시킬 수 있다.

  • JIT 컴파일러는 특정 상황의 테스트 값 혹은 논리 연산의 결과를 실행 전에 이미 정확히 알 수 있다. 다음의 코드가 이런 예이다.

    if(numberOfCPUs > 1) {
    //...
    }

    이 경우 JIT 컴파일러를 호스팅하고 있는 시스템의 CPU가 하나라면 KIT 컴파일러는 해당 if 블록이 할상 실행되지 않을 것을 알 것이며, 따라서 전체 if 문을 네이티브 코드로 변황하지 않을 것이다. 이 경우 어플리케이션의 실행 코드는 호스팅하는 운영체계에 최적화된 코드이며 좀 더 작고 좀 더 빠른 네이티브 코드를 생성하게 된다.

  • CLR은 어플리케이션의 실행 패턴을 프로파일(profile)할 수 있으며 이에 따라서 어플리케이션 실행중에 IL 코드를 네이티브 코드로 다시 컴파일할 수 있다. 재컴파일된 네이티브 코드는 프로파일된 실행 패턴을 바탕으로 코드의 분기를 최적화하기 위해서 재정열된다.
- CLR Via C# 2nd Edition (Jeffrey Richter 저 / 송기수 역) 에서 발췌
2008/11/30 22:21 2008/11/30 22:21
http://lemonwidz.com/tc/trackback/5
전체 (23)
사진이야기 (4)
프로그래밍 (18)
  1. Nyaonge's Home  2011
    [C#] ?? 연산자(물음표 두개)
  1. 2012/03 (1)
  2. 2011/12 (2)
  3. 2009/07 (1)
  4. 2009/04 (1)
  5. 2009/03 (9)