2011-07-31 20 views
4

私は既知の構成(HP DL120 G7、Xeon E3-1220、重要な場合はWindows Server 2008 R2 Foundation)の1台のコンピュータでのみ実行する必要がある.NET C#アプリケーションがあります。このアプリケーションを他のコンピュータで実行する必要はありません。CPU最適化のための.NETアプリケーションをコンパイルするには?

は、私が欲しいへ:

  • できるだけ速くそれを作る(すなわち、おそらく「使用のXeon E3-1220」キーか何かでコンパイル?)
  • はそれが少し(それが必要確保バイナリからC#のソースコードを復元するのは簡単ではありません)。

どういうわけかネイティブWindowsコードにコンパイルしてください。おそらく私はいくつかの特別なコンパイラオプションを使うべきでしょうか?

答えて

4

「リリース」モードでコンパイルして、最適化を有効にすることができます。また、ngen.exeを実行すると、JITのオーバーヘッドが発生しないネイティブDLLを生成できます。

しかし、これらのすべての対策やツールは、あなたのコードではあまり書かれていないコードではありません。あなたのアプリをプロファイリングして、コードパスの実行時間を即興にできるだけでなく、より遅いパスを見つけ出す(そしてそれらを改善しようとする)かどうかを確認する必要があります。

セキュリティを確保するには、(Salamander、SmartAssemblyなど)のような良い難読化ツールを使用します。それは完全に見分けがたいものではありませんが、もっと難しくなります。

から絶対にこれを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アセンブリからコードを復元するのは簡単です。あなたは内容を難読化することによって(Googleのために)何らかの方法で行くことができます。

コンパイルに関して、CLRはプロセスが開始されると効率的にコンパイルします。これについては心配する必要はありません。起動時間が高い場合、あなたはあなたのアセンブリをコンパイルするNGEN(AOTコンパイラ)を使用することができます。

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

あなたはそれが高速です確認するには、(あなたが最適化して、しかし、リリースモードでコンパイルしますあなたのプロジェクトのプロパティになります)。

関連する問題