NGenのススメ ~読み込み実行の高速化~

  • 概要

    Powershellはモジュールとして非常に多数のアセンブリを読み込むため、
    スクリプトを実行しはじめるまでに少し時間がかかります。

    実際に、hmPS.dllを利用したマクロ(PowerShellスクリプト)を実行すると、
    少し待ち時間を体感出来るハズです。
    これは、hmPS.dllだけではなく、PowerShellを実行した際に、
    とても起動時間がかかるのと同じです。

    同じスクリプトを2回目以降実行する分には、この時間は大幅に短縮されます。

    NGenを利用し、待ち時間を大幅短縮

    NGen(ネイティブ イメージ ジェネレーター)を利用することで、この最初の待ち時間を大幅にカットすることが出来ます。
    (但し、PowerShellの場合はそれでも結構遅いです)

    • 「管理者権限」でPowerShellを実行

      管理者権限でPowerShellを実行します。管理者権限であることが必須です。

      Set-Alias ngen @(
        dir (join-path ${env:\windir} "Microsoft.NET\Framework") ngen.exe -recurse |
        sort -descending lastwritetime
      )[0].fullName 
      
      Set-Alias ngen64 @(
        dir (join-path ${env:\windir} “Microsoft.NET\Framework64”) ngen.exe -recurse |
        sort -descending lastwritetime
      )[0].fullName
      
      [appdomain]::currentdomain.getassemblies() | % {
        if($_.location -match $(‘\\assembly\\GAC_64’)){
          ngen64 install $_.location
        } else {
          ngen install $_.location
        }
      }
      

  • hmPS自体のNGen

    • 「管理者権限」でプロンプトを実行

      管理者権限でプロンプトを実行します。管理者権限であることが必須です。

    • .NET Frameworkのフォルダへと移動

      cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
      
      もしも、x86版のhmPS.dllではなく、x64版のhmPS.dllを利用している人は、
      cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
      
      といったように、64版のFrameworkディレクトリへと移動してください
    • hmPS.dllのネイティブイメージを作成

      以下のように「ngen install」のコマンドを利用して、ネイティブイメージを作成してください。 「C:\usr\hidemaru\hmPS.dll」の部分は、実際のあなたの秀丸のディレクトリやhmPS.dllの位置に合わせてください。

      ngen install "C:\usr\hidemaru\hmPS.dll"