「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
初回が遅くなるケースの
についてまとめています。
アプリケーションの起動 †
CLRの周辺 †
ランタイムのロード †
- .NET Framework 自体のロード
ファイルシステム・キャッシュ上に乗せるため、
スタートアップ・スクリプトで.NETプログラムをキックする。
(コールド スタート → ウォーム スタート化)
- ウォーム スタート
ウォーム スタートは、主要なCLRコンポーネント用のページの殆どが、
既にメモリに読み込まれているときに発生し、貴重なディスク アクセス時間が節約されます。
このため、マネージ アプリケーションを再度実行すると、初回よりも短い時間で起動します。
- マネージ・プロセスのロード
DLLのロード、CGスレッドの起動などがあるため。
また、WPFの初期化はWindwos Formsより遅い。
プリ・コンパイル †
- IIS(ASP.NET)上のJITコンパイル運用、プリ・コンパイルで高速化可能。
JITコンパイルと、NGen †
- JITコンパイル運用、NGenによるプリ・コンパイルで高速化可能。
速度 NGen の強力な新機能によるアプリケーションのパフォーマンス向上
※ .NET CoreからNGENは、ReadyToRun + Tiered Compilationになるらしい。
プロセス起動の周辺 †
ミドルウェア類のプロセス起動に時間がかかっている可能性があります。
IIS、ASP.NET †
ワーカ・プロセス起動からJITコンパイルまで、
以下の対応で解決する可能性があります。
- IIS6 以前
定期的にダミーのリクエストを送信するなどの作りこみが必要(添付参照)
UI初期化の周辺 †
UIコントロールの初期化、描画によるチラつき †
画面上に表示されるUIコントロールが多い場合のUIコントロールの初期化
(この問題はWPFなどでも解決していないが、描画回数は少なく抑えられる)
- Windows Formsでは以下の方法で描画回数を抑えることができる。
初期化データ取得 †
- 画面表示時のデータ取得ラウンド・トリップ
ファサードパターンなどを取りれておらず、
クライアント・サーバ間のラウンド・トリップが問題になることがある。
DBMS関連 †
キャッシュ †
DBアプリケーションでは、DBMSの持つデータがキャッシュに上がるまで
I/O処理時間がかかるため、初回起動時の性能が遅く感じられるケースがあります。
この場合、
- SQLのDMLを流すか
- UI操作をシミュレーションする類のツール
のスクリプト、若しくはリクエストを流すか
することで、迅速にキャッシュにデータが上がるようにします。
統計情報の自動作成 †
統計情報の自動作成によって、初回実行に遅くなることがあるようです。
ネットワーク関連 †
通信パケットを覘く †
基本的に「つながらない!」に記載された方法で確認する。
HTTP †
HTTP電文を覘く †
基本的に「つながらない!」に記載された方法で確認する。
プロキシの自動検出 †
プロキシを自動検出している場合に遅い事例がありました。
IEの「インターネットオプション」→「接続」タブ→「自動構成」→「設定を自動的に検出する」
IEの「ネットワークの設定を自動検出する」機能とは
http://www.monyo.com/technical/windows/06.html
SSL †
SSLハンドシェークが問題になるケースがあります。
HTTP Keep Alive †
HTTP 遅すぎる原因はHTTPSの
SSLハンドシェーク エンタープライズ マイナビニュース
http://news.mynavi.jp/news/2009/11/11/013/index.html
この問題の解決方法にHTTP Keep Alive設定があります。
サーバ・クライアントの双方に、HTTP Keep Alive設定が可能です。
証明書失効リスト (CRL)にアクセスできないときに遅い場合があります。
こちらは、SSL(HTTPS)接続に限らず、
デジタル署名されたプログラムの検証等のタイミングでも動作します。
- FIX: A .NET Framework 2.0 managed application
that has an Authenticode signature takes longer than usual to start
LDAP †
LDAPアクセスに使用しているAPI(ADSI)は、
ADのスキーマ更新やDC再起動後に
ADのスキーマキャッシュ情報が
クライアントにダウンロードされる仕様であり、
このトラフィックにより時間がかかることがある。
その他 †
リトライ処理 †
svnコマンド †
「初回が」と言う訳では無いですが、
- SubversionクライアントのsvnコマンドをASP.NET(IIS)の
Network Serviceアカウントから実行すると遅くなるという現象があった。
- パケット・キャプチャを行うと、
- svnのクライアントがコマンド入力を受けてから
- svnのサーバに対してリクエストを投げる間
のsvnクライアント側で遅くなっていることを確認できた。
C:\Documents and Settings\Default User\Application Data\Subversion
以下にアクセスし、アクセス拒否+リトライを繰り返している事が確認できた。
- 解決のため、上記のフォルダに、IIS_WPGグループの
アクセス許可を付与した所、速く動作するようになった。
Tags: :あるある, :障害対応, :性能, :デバッグ