「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>あるある]] * 目次 [#j14bc523] #contents *概要 [#r381c1e0] 初回が遅くなるケースの -事例と -トラブルシュートの方法 についてまとめています。 *アプリケーションの起動 [#p86de8d9] -アプリケーションの起動時間~ http://msdn.microsoft.com/ja-jp/library/vstudio/cc656914.aspx **CLRの周辺 [#zff19bfc] ***ランタイムのロード [#vfdc4360] -.NET Framework 自体のロード~ ファイルシステム・キャッシュ上に乗せるため、~ スタートアップ・スクリプトで.NETプログラムをキックする。~ (コールド スタート → ウォーム スタート化) --ウォーム スタート~ ウォーム スタートは、主要なCLRコンポーネント用のページの殆どが、~ 既にメモリに読み込まれているときに発生し、貴重なディスク アクセス時間が節約されます。~ このため、マネージ アプリケーションを再度実行すると、初回よりも短い時間で起動します。 -マネージ・プロセスのロード~ DLLのロード、CGスレッドの起動などがあるため。~ また、WPFの初期化はWindwos Formsより遅い。 ***プリ・コンパイル [#v41e404e] -IIS(ASP.NET)上のJITコンパイル運用、プリ・コンパイルで高速化可能。 --ASP.NET のプリコンパイルの概要~ http://msdn.microsoft.com/ja-jp/library/bb398860.aspx --ASP.NET Web サイトのプリコンパイルの概要~ http://msdn.microsoft.com/ja-jp/library/399f057w.aspx --Web サイトの内容をプリコンパイルしておく方法~ http://msdn.microsoft.com/ja-jp/library/cc671425.aspx ***JITコンパイルと、NGen [#t1a10d54] -JITコンパイル運用、NGenによるプリ・コンパイルで高速化可能。~ 速度 NGen の強力な新機能によるアプリケーションのパフォーマンス向上 -- MSDN Magazine, 2005 年 4 月~ http://msdn.microsoft.com/ja-jp/magazine/ee207418.aspx -ngen化したモジュールのインストーラーによる配布について~ http://social.msdn.microsoft.com/Forums/netframework/ja-JP/f60483fd-2c72-4776-8de6-8c862152fe58/ngen >NGENされたファイルを含んでいるのではなく、~ WiXのカスタムアクションを使って実行にNGENしてます。~ ~ NGENはそのマシンのリソースに合わせてJIT相当の処理を事前に行う~ 仕組みなので実行環境以外でNGENすることに意味をもっていません。 **プロセス起動の周辺 [#rfa46b2a] ミドルウェア類のプロセス起動に時間がかかっている可能性があります。 ***IIS、ASP.NET [#gd7c0b3c] ワーカ・プロセス起動からJITコンパイルまで、~ 以下の対応で解決する可能性があります。 -IIS7 以降 --アプリケーション プールの自動スタートアップを構成する (IIS 7)~ http://technet.microsoft.com/ja-jp/library/cc772112(v=ws.10).aspx -IIS6 以前~ 定期的にダミーのリクエストを送信するなどの作りこみが必要(添付参照) --&ref(pingWebApp.vbs); ***[[DBMS>#jfba6dbf]] [#d5476382] **UI初期化の周辺 [#z010e504] ***UIコントロールの初期化、描画によるチラつき [#bfdbe45d] 画面上に表示されるUIコントロールが多い場合のUIコントロールの初期化~ (この問題はWPFなどでも解決していないが、描画回数は少なく抑えられる)~ -参考:[[WPF>新アーキテクチャ設計ガイド補足(アプリケーション・アーキテクチャ)#m56020b7]] -Windows Formsでは以下の方法で描画回数を抑えることができる。 --ダブル・バッファリング~ @IT:.NET TIPS ダブル・バッファリングにより描画を行うには?~ http://www.atmarkit.co.jp/fdotnet/dotnettips/197doublebuf/doublebuf.html --サスペンド・レイアウト~ ---Control.SuspendLayout メソッド (System.Windows.Forms)~ http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.suspendlayout.aspx~ ---Control.ResumeLayout メソッド (System.Windows.Forms)~ http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.resumelayout.aspx~ ---コントロールとその子のための絵画をサスペンドを行う方法~ http://ja.softuses.com/110728 ***初期化データ取得 [#z062754d] -画面表示時のデータ取得ラウンド・トリップ~ ファサードパターンなどを取りれておらず、~ クライアント・サーバ間のラウンド・トリップが問題になることがある。 *DBMS関連 [#jfba6dbf] **キャッシュ [#dada912b] DBアプリケーションでは、DBMSの持つデータがキャッシュに上がるまで~ I/O処理時間がかかるため、初回起動時の性能が遅く感じられるケースがあります。 この場合、 -SQLのDMLを流すか -UI操作をシミュレーションする類のツール~ のスクリプト、若しくはリクエストを流すか することで、迅速にキャッシュにデータが上がるようにします。 **統計情報の自動作成 [#e0953ddc] 統計情報の自動作成によって、初回実行に遅くなることがあるようです。 -SQLServer: クエリの初回実行だけやたらと遅いときに考えられる原因 - Qiita~ http://qiita.com/emotu/items/9dd961e248113c88a1b7 --SQL Server の統計情報作成について書いてみた、ちょっとだけマジメにまとめてみた - 都内で働くSEの技術的なひとりごと~ http://ryuchan.hatenablog.com/entry/2014/03/23/184242 *ネットワーク関連 [#lbdd20f3] **通信パケットを覘く [#jfd853ee] 基本的に「[[つながらない!]]」に記載された方法で確認する。 **HTTP [#k9ea5d45] ***HTTP電文を覘く [#sece851a] 基本的に「[[つながらない!]]」に記載された方法で確認する。 ***プロキシの自動検出 [#x90ec379] プロキシを自動検出している場合に遅い事例がありました。~ IEの「インターネットオプション」→「接続」タブ→「自動構成」→「設定を自動的に検出する」~ ~ IEの「ネットワークの設定を自動検出する」機能とは~ http://www.monyo.com/technical/windows/06.html **SSL [#sd950b28] SSLハンドシェークが問題になるケースがあります。 ***HTTP Keep Alive [#h13025a1] HTTP 遅すぎる原因はHTTPSの~ SSLハンドシェーク エンタープライズ マイナビニュース~ http://news.mynavi.jp/news/2009/11/11/013/index.html~ この問題の解決方法にHTTP Keep Alive設定があります。~ サーバ・クライアントの双方に、HTTP Keep Alive設定が可能です。 -HTTP キープアライブを有効にする~ http://msdn.microsoft.com/ja-jp/library/cc780771.aspx -Internet Explorer のデフォルトの~ Keep-Alive タイムアウト値を変更する方法~ http://support.microsoft.com/kb/813827/ja -HttpWebRequest.KeepAlive プロパティ (System.Net)~ http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest.keepalive.aspx ***[[証明書失効リスト (CRL)]] [#tc6a0288] [[証明書失効リスト (CRL)]]にアクセスできないときに遅い場合があります。 -同じ SSL (https) 接続の速度が証明書によって異なる~ http://support.microsoft.com/kb/295070/ja こちらは、SSL(HTTPS)接続に限らず、~ デジタル署名されたプログラムの検証等のタイミングでも動作します。~ -FIX: A .NET Framework 2.0 managed application~ that has an Authenticode signature takes longer than usual to start~ --http://support.microsoft.com/kb/936707 --http://support.microsoft.com/kb/936707/en-us --Exchange Server 2007 managed code services do not start~ after you install an update rollup for Exchange Server 2007~ http://support.microsoft.com/kb/944752/en-us --基調講演のデモで発生した遅延の問題~ http://technet.microsoft.com/ja-jp/windows/ee803752.aspx --.NET Framework はインターネット接続が必要?~ http://social.msdn.microsoft.com/Forums/ja-JP/netfxfaqja/thread/271023cd-1ada-4e00-be4e-014068d9de66/ **LDAP [#c6e1f787] LDAPアクセスに使用しているAPI(ADSI)は、 >ADのスキーマ更新やDC再起動後に~ ADのスキーマキャッシュ情報が~ クライアントにダウンロードされる仕様であり、 このトラフィックにより時間がかかることがある。~ *その他 [#ieb63451] **リトライ処理 [#pf7d67f2] ***svnコマンド [#tfc1f81b] 「初回が」と言う訳では無いですが、 -SubversionクライアントのsvnコマンドをASP.NET(IIS)の~ Network Serviceアカウントから実行すると遅くなるという現象があった。 -パケット・キャプチャを行うと、 --svnクライアントがリクエストを受けてから --svnのサーバに対してリクエストを投げる間 >のクライアント側で遅くなっていることを確認できた。 -このため、svn.exe内部で問題が起きていると考え、~ [[ProcessMonitor>障害対応に使用するツールの一覧#n72fadf5]]を使用してプロセス内を確認すると、 > C:\Documents and Settings\Default User\Application Data\Subversion~ >以下にアクセスし、アクセス拒否+リトライを繰り返している事が確認できた。 -解決のため、上記のフォルダに、IIS_WPGグループの~ アクセス許可を付与した所、速く動作するようになった。 -参考:[[サービス・タスク系のアカウント問題]] ---- Tags: [[:あるある]], [[:障害対応]], [[:性能]], [[:デバッグ]]