2011-07-31 4 views
4

알려진 구성 (HP DL120 G7, Xeon E3-1220, Windows Server 2008 R2 Foundation이 중요한 경우)이있는 한 대의 컴퓨터에서만 실행해야하는 .NET C# 응용 프로그램이 있습니다. 이 응용 프로그램을 다른 컴퓨터에서 실행할 필요가 없습니다.CPU 최적화를 위해 .NET 응용 프로그램을 컴파일하는 방법은 무엇입니까?

내가 원하는 :

  • 가능한 한 빨리 그것을 만들기 (즉, 아마도 "를 사용 제온 E3-1220"키 또는 뭔가 컴파일?)
  • 그것이 조금 (이해야 확보 바이너리에서 C# 소스 코드를 복원하는 것은 간단하지 않음).

어떻게 든 네이티브 Windows 코드로 컴파일해야합니까? 아마도 특별한 컴파일러 옵션을 사용해야할까요?

답변

4

"릴리스"모드로 컴파일하여 최적화 할 수 있습니다. 또한 ngen.exe을 실행하여 JIT의 오버 헤드가 발생하지 않는 네이티브 DLL을 생성 할 수 있습니다.

그러나 이러한 모든 방법과 도구는 잘못 작성된 코드 (귀하의 코드가 아니라는 뜻)에 맞지 않습니다. 앱의 프로필을 작성하고 코드 경로의 실행 시간을 즉석에서 조정할 수있을뿐만 아니라 느린 경로를 찾아 개선 할 수 있는지 확인해야합니다.

보안을 유지하려면 (도롱뇽, SmartAssembly 등)과 같은 좋은 obfuscator를 사용하십시오. 그것은 완전히 식별 할 수는 없지만 훨씬 더 어렵게 만들 것입니다.

까지 절대적으로 C++로 코드화하십시오! /clr 옵션으로 컴파일하면 immune to reflection이되고 해체됩니다.

+0

그래서 시작 시간에 관심이 없다면 ngen이 필요하지 않은 "실행"시간에만주의해야합니다. 최대한의 최적화를 위해 타겟 플랫폼에서 사용할 코드를 어떻게 든 컴파일 할 수 있습니까? (hm 또는 아마도 .net 런타임은 나를 위해 그것을 할 것입니다) – javapowered

+0

글쎄, 작은 작업 집합 및 _processes_ 사이의 이미지 공유와 같은 추가적인 이점이 있습니다. Jitted 어셈블리는 AppDomain에 전용이므로 공유 할 수 없습니다. 몇 가지주의 사항이 있습니다. 전체 내용을 이해하려면 [MSDN] (http://msdn.microsoft.com/en-us/library/6t9t5wcf.aspx) 문서를 읽어 보시기 바랍니다. – Mrchief

1

ngen을 사용하면 어셈블리의 최적화 된 기본 이미지를 만들고 캐시 할 수 있습니다.

2

.Net 어셈블리에서 코드를 복원하는 것이 쉽습니다. 당신은 내용을 (구글에 대한) obfuscating하여 어떤 방법으로 갈 수 있습니다.

컴파일 과정에서 CLR은 프로세스가 시작될 때이를 효율적으로 컴파일합니다. 걱정할 필요가 없습니다. (당신이 빨리 있는지 확인하려면

http://en.wikipedia.org/wiki/Native_Image_Generator

, 당신은 최적화와 함께,하지만 릴리스 모드에서 컴파일해야합니다 : 시작 시간이 높은 경우에, 당신은 당신의 어셈블리를 컴파일 NGEN (AOT 컴파일러)를 사용할 수 있습니다 귀하의 프로젝트 속성에있을 것입니다).

관련 문제