CustomScript

ページ

2020年4月5日日曜日

.NET Framework の ネイティブイメージコンパイル

  • .NET Framework
ひさびさの技術情報です。

「ネイティブ イメージを使って .NET デスクトップ アプリを最適化する」 というものがあったので試してみました。

これまで .NET Framework のネイティブコンパイラといえば NGEN がありました。 ネイティブコードにコンパイルしたものをシステムのキャッシュに登録し、実行時にそのキャッシュを使うことで高速化する仕組みです。 ですが、扱いづらい部分もあって、NGENツールでコンパイルしてシステムのキャッシュに登録するという処理が必要なためにインストール時に処理ができるMSIパッケージ等でしか実用できませんでした。 あと、フレームワークが更新されるとキャッシュが無効になるという問題もありました。

新しいネイティブイメージコンパイラはそのあたりの懸案が解消されます。 ビルド時にネイティブコンパイルも行い、実行ファイルの中にネイディブコードを埋め込みます。このため、ZIPパッケージやストアアプリでも恩恵を受けることができます。 欠点としては、アーキテクチャをx86,x64どちらかに限定してビルドしないといけないこと、ネイティブコードの分実行ファイルのサイズが大きくなること、でしょうか。

試してみた


試しにNeeViewをネイティブイメージコンパイラに対応させて検証してみました。起動からウィンドウ表示までの時間を複数回計測します。
# Default NeeView.exe size : 2,552KB App.MainWndow.Loaded.Done: 1735ms App.MainWndow.Loaded.Done: 1697ms App.MainWndow.Loaded.Done: 1728ms
# with Native Image Compiler NeeView.exe size : 5,420KB App.MainWndow.Loaded.Done: 1070ms App.MainWndow.Loaded.Done: 1028ms App.MainWndow.Loaded.Done: 1047ms
ファイルサイズは倍増しましたが、起動速度は3割ほど早くなりました。結構効いてますね。 数回起動してコンパイル済みキャッシュが効いている状態なので、初回起動時ならこの差はもっと大きくなると予想されます。

導入の注意点


「ネイティブ イメージを使って .NET デスクトップ アプリを最適化する」 を参照して導入すればいいのですが、いくつか注意点があります。
  • PowerShellでNugetインストールするとあるが、そのPowershellはパッケージマネージャーコンソールのことである(ツール > NuGetパッケージマネージャー > パッケージマネージャーコンソール)。通常のNugetパッケージのようにプロジェクトのNugetパッケージ管理からインストールしても良い。実行ファイルのプロジェクトだけで良い。
  • デフォルトのビルドログは省略されているので、オプションの「ビルド/実行」でビルド出力/ログを最小以上にする。これで "Native image ~ generated successfully" が確認できる。
  • VisualStudioから実行するとネイティブコンパイルされてないバイナリに置き換わってしまう?

2020年3月28日土曜日

画像ビューアー 「NeeView」36.2 更新しました

  • .NET Framework 4.7.2
  • WPF
画像ビューアー NeeView を 36.2 に更新しました。
不具合修正のみとなります。

36.2

(2020-03-28)

修正

  • 7zを使用した読み込みでCOM例外が発生することがある不具合修正
  • 起動引数としてプレイリストを指定したときに本棚として開かれていなかった不具合修正
  • ウィンドウ最小化から復帰した時にキーボードフォーカスが失われることがある不具合修正
  • 本棚をサムネイル表示にしているときの名前変更でポップアップが機能していた不具合修正


2020年3月7日土曜日

画像ビューアー 「NeeView」36.1 更新しました

  • .NET Framework 4.7.2
  • WPF
画像ビューアー NeeView を 36.1 に更新しました。
不具合修正が主な更新です。

36.1

(2020-03-07)

変更

  • インストーラー版でインストール時にコンテキストメニュー追加が選択できるようになりました
  • 削除確認ダイアログが二重に表示されることがあるため、ファイル削除時のエクスプローラー確認ダイアログ表示を設定にした (設定 > 全般 > ファイル削除時にエクスプローラーの確認ダイアログを表示する)
  • 情報パネル、エフェクトパネルにTAB移動したときのフォーカス表示を削除

修正

  • 「パネルを一時的に表示する」コマンドが機能していない不具合修正
  • ハイコントラストモードでメニューが読めなくなる不具合修正

2020年2月29日土曜日

画像ビューアー 「NeeView」36.0 更新しました

  • .NET Framework 4.7.2
  • WPF
画像ビューアー NeeView を 36.0 に更新しました。
しばらくぶりですが、地味めな更新です。

36.0

(2020-02-29)

新着

  • ウィンドウ最大化でのギャップ調整設定追加 (設定 > 表示 > タイトルバー非表示でのウィンドウ最大化のギャップ調整)
  • エクスプローラーのコンテキストメニュー「NeeViewで開く」を追加する設定追加 (設定 > 全般 > エクスプローラーのコンテキストメニューに登録)
    • インストーラー版ではインストール時に自動設定されます。ストアアプリ版は非対応です。
  • 「メインビューにフォーカスを移す」コマンド追加
  • ページ表示ログ出力機能追加 (設定 > ページ表示記録)
  • ごみ箱に対して大きすぎるファイルの削除時に完全削除の確認ダイアログを表示するようにした
  • 圧縮ファイル中の動画再生対応。テンポラリに出力して再生する
  • メニューの項目を右クリックすることで直接コマンドパラメータ設定ウィンドウを呼び出せるようにした
  • 「ファイルに保存(Shift+Ctrl+S)」コマンド追加。コマンドパラメーターに設定した情報で直接保存を実行する。重複ファイル名は連番をつけて回避される

変更

  • パネル等を自動で隠す機能の刷新 (設定 > 表示 > 自動非表示パネル)
  • フィルムストリップの表示ONにしたときにフォーカス移動するようにした
  • ファイル情報パネル:「日付」をファイル日付と撮影日時に分離。これに伴い「EXIFの日付を使用する」設定廃止
  • コマンドによるブック削除の挙動を本棚からの削除に近づけた
  • プレイリストから開いたブックも削除可能にした。プレイリストデータは変更されないがファイルが存在しないため結果としてリストには表示されなくなる
  • 初期ウィンドウサイズをシステム依存に変更
  • フルスクリーンにする前のウィンドウ状態を保存するようにした
  • フォーカスのTABキー移動の整備
  • 除外するフォルダー判定で大文字小文字を区別しないようにした
  • 右ボタンドラッグを他のドラッグ操作に割り当てられるようにした
  • 自動再帰判定は通常のフォルダーに対してのみ行うようにした
  • 「履歴全般」の本棚関連の設定を「本棚」ページに移動。 「本棚の場所を復元する」設定を分離し「起動設定」ページに追加
  • 設定ウィンドウのツリー項目の親と最初の子の表示が同じなので、親のページのみにした。
  • 「名前をつけてファイルに保存」コマンドの刷新。「表示を保存」で拡大回転等を反映させた表示のままの画像を出力する
  • Susie接続タイムアウトを30秒から1秒に変更し、10回リトライするようにした
  • 各種ライブラリの更新

修正

  • 通知を「小さく表示する」にしたときに繰り返されたメッセージが表示されない不具合修正
  • 拡大縮小の中心が「カーソル位置」のときのドラッグ操作「拡大縮小」不具合修正
  • フルスクリーン状態を復元する設定が機能しないことがある不具合修正
  • GIFファイルのショートカットがアニメーションしない不具合修正
  • フルスクリーン時にタスクバーが隠れない事がある不具合修正
  • 表示スケールが100%でないディスプレイでページ送り時にリサイズ処理が余分に実行される不具合修正
  • フォルダ名の大文字小文字のみの名前変更ができない不具合修正
  • 2ページ間の距離を設定しているときに不正終了することがある不具合修正
  • タブレットモードでフルスクリーンを解除したときにウィンドウが最大化されないことがある不具合修正
  • 回転スナップ値が大きいときにコマンドでの回転ができないことがある不具合修正
  • マルチディスプレイでウィンドウ最大化時に隣のウィンドウにはみだずことがある現象修正
  • 多重起動禁止で引数無しで多重起動しようとしたときにウィンドウがアクティブにならい不具合修正
  • ショートカットキーPageDownのメニュー表記がNextになっている不具合修正
  • フルスクリーンを再度設定しようとしたときの余分なウィンドウ状態変化を抑制



2019年7月20日土曜日

画像ビューアー 「NeeView」35.1 更新しました

  • .NET Framework 4.7.2
  • WPF
画像ビューアー NeeView を 35.1 に更新しました。
不具合修正のみとなります。

35.1

(2019-07-20)

不具合修正

  • ウィンドウ最大化の時に隙間ができることがある不具合修正
  • 複数起動時にページマークがうまく反映されない不具合修正

2019年7月13日土曜日

画像ビューアー 「NeeView」35.0 更新しました

  • .NET Framework 4.7.2
  • WPF
画像ビューアー NeeView を 35.0 に更新しました。
実行ファイルが1つになって少しシンプルになりました。

35.0

(2019-07-13)

Susieプラグイン(.spi)の標準サポート

  • 標準のNeeViewがSusieプラグイン(.spi)に対応しました。64bitOSでも動作します。これに伴いNeeViewSは廃止されました。
  • .sphプラグインのサポートは廃止されました。

不具合修正

  • フォルダー名末尾が全角スペースのときに読み込めない不具合修正
  • フルスクリーン状態の復元に関する不具合を修正

その他

  • 表示スケールとは別に「拡大の許可」「縮小の許可」設定を追加。これに伴い「大きい(小さい)場合はウィンドウサイズに合わせる」設定を廃止
  • キー操作でスライドショータイマーをキャンセル
  • サイドパネルのリストのアイコンの形にバナーを選択できるようにした
  • アップグレードインストールで前回のインストール場所を既定の場所にするようにした。次の更新から機能します。
  • 「閲覧中のブックを削除したときに次のブックを開く」設定を本棚の設定に追加
  • コマンド単位での左右入れ替え設定をコマンドパラメータに実装
  • ページの並び順でのファイル優先設定を、設定の「ページ設定」に追加
  • 設定のサブフォルダーページをページ設定に統合

2019年6月8日土曜日

画像ビューアー 「NeeView」34.4 更新しました

  • .NET Framework 4.7.2
  • WPF
画像ビューアー NeeView を 34.4 に更新しました。
不具合修正のみとなります。

34.4

(2019-06-08)
  • サブディスプレイで最大化状態で復元しない不具合修正
  • リサイズフィルター有効時にルーペモードのままブックを切り替えると読み込みが終わらない不具合修正
  • 画像を開いていないときの画像拡大縮小操作でクラッシュする不具合修正
  • ソリッド圧縮ファイル事前メモリ展開有効時にSusieプラグイン画像読み込に失敗することがある不具合修正
  • ブックのファイル削除に失敗することがある不具合修正
  • フルスクリーンのときにWindows+数字キーでアプリが切り替わらない不具合修正
  • MSIインストーラーでの更新でタスクバーのショートカットが無効化する現象の対策。次の更新から機能します。