PowerShell の起動を高速化する

PowerShell の起動が遅い理由

PowerShell に限らず .NET Framework で構成されたアプリケーションは、OS起動後、初めての起動で大変時間がかかります。これには理由があります。

まず、.NET Framework 以前のアプリケーションは、「マシン語」と呼ばれる、 CPU が直接理解できる言語で書かれています。たとえ C 言語や VisualBasic などの「高級言語」で開発されたとしても、最終的にはマシン語に直さないと CPU はこれを実行できません。したがって、コンパイラやインタプリタが、翻訳の労を担います。

.NET Framework の場合、アセンブリは IL と呼ばれる中間言語で書かれています。中間言語ですから、これは直接実行できません。そのため、初めての起動では、JIT(Just In Time)コンパイラがこれをマシン語に翻訳します。

これが、.NET Framework アプリケーションの起動に時間がかかる理由です。

Ngen.exe

.NET Framework には、ネイティブ イメージ ジェネレータ (Ngen.exe) というツールが付属しています。

参照: MSDN「ネイティブ イメージ ジェネレータ (Ngen.exe)」

これは、IL で書かれたアセンブリをマシン語にコンパイルし、「ネイティブ イメージ キャッシュ」と呼ばれる場所にインストールするツールです。ネイティブイメージキャッシュにインストールされたアセンブリは、直接実行できますので、起動が高速化されるというわけです。

ダウンロード

以下のスクリプトを実行すると、現在ロードされているアセンブリを、すべてネイティブイメージキャッシュにインストールします。

 

追記

  • 2012年12月26日 Powershell は多くの動的ライブラリを読み込むため、ネイティブイメージが作成されていても、ディスクキャッシュの無い初回起動にはそれなりに時間がかかります。現在のパソコンでは処理速度の上昇により掲載当時よりコンパイル時間がかなり短くなりますので、ディスクからの読み取り速度の方が問題になるかもしれません。
  • 2012年12月26日 MSDN の「ネイティブ イメージの生成」によると、新しい .NET Framework では、ネイティブイメージは Ngen.exe を使わなくても自動的に作成されるようです。

PowerShell の起動を高速化する」への1件のフィードバック

  1. ピンバック: NgenによるPowershell起動の高速化を試す « guitarrapc.wordpress.com

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です