Ngenが私のアプリケーションを保護しない場合、私のキャリアでこのアプリケーションを使用することを合理的に期待できるのはいつですか?
3 に答える
ジェフリー・リッチターは彼の本に素晴らしい作品を書きました。3番目のリリースにそれがあるかどうかはわかりませんが、2002年に彼がNgen'ingについて書いた素晴らしい作品があります。
ハイライト:
一方、NGenのファイルに関してはいくつかの潜在的な問題があります。
知的財産保護はありません。多くの人々は、元のILコードを含むファイルを出荷せずにNGendファイルを出荷して、知的財産を秘密にしておくことが可能であると考えています。残念ながら、これは不可能です。実行時に、CLRはアセンブリメタデータへのアクセスを必要とし、NGendファイルにはメタデータが含まれていません。
NGendファイルが同期しなくなる可能性があります。CLRは、NGenされたファイルをロードするときに、以前にコンパイルされたコードと現在の実行環境に関するいくつかの属性を比較します。属性のいずれかが一致しない場合、NGenされたファイルは使用できず、代わりに通常のJITコンパイラプロセスが使用されます。
貧弱な管理。アセンブリがアンインストールされても、NGenされたファイルは自動的に削除されず、.NETFrameworkの簡単な管理とXCOPYの展開ストーリーに悪影響を及ぼします。
劣ったロード時のパフォーマンス(リベース)。WindowsがNGendファイルをロードするとき、ファイルが優先ベースアドレスにロードされるかどうかを確認します。ファイルが優先ベースアドレスでロードできない場合、Windowsはファイルを再配置し、すべてのメモリアドレス参照を修正します。Windowsはファイル全体をメモリにロードし、ファイル内のさまざまなバイトを変更する必要があるため、これには非常に時間がかかります。リベースの詳細については、私の著書「Microsoft Windows用プログラミングアプリケーション、第4版(Microsoft Press)」を参照してください。
実行時間のパフォーマンスが劣っています。
コードをコンパイルするとき、NGenはJITコンパイラーができる限り多くの実行環境についての仮定をすることができません。これにより、NGen.exeは、JITコンパイル済みコードに必要のない多数のメモリ参照間接参照を含むコードを生成します。
NGenは、パフォーマンスを向上させるためにILをコンパイルするためだけのものです。アプリをリバースエンジニアリングから保護するためのコードの難読化を調べてください。
読み込み速度はそれが本当に役立つすべてです。そうは言っても、それは最大2000%(そうです)の改善をもたらすことができます。
編集:
通常、JITされたコードはNGENされたコードよりも高速になる傾向があることに注意してください。