15
L3-224 L3-224 300 300 30 30 分でズバリ 分でズバリ !! !! .NET .NET アプリケーションの アプリケーションの 動作 動作 (株)東日本計算センター (株)東日本計算センター 業務一部 業務一部 小野 修司 小野 修司

20050623 2

  • Upload
    -

  • View
    210

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 20050623 2

L3-224L3-224300300 秒 秒 3030分でズバリ分でズバリ !!!!

.NET .NET アプリケーションのアプリケーションの動作動作

(株)東日本計算センター(株)東日本計算センター業務一部業務一部小野 修司小野 修司

Page 2: 20050623 2

アジェンダアジェンダFramework Framework って何?って何?動作の基本動作の基本– Console Console アプリケーションのコンパイルアプリケーションのコンパイル– Console Console アプリケーションの実行アプリケーションの実行

Windows Windows アプリケーションアプリケーション– イベントの処理イベントの処理

Web Web アプリケーションアプリケーション– Page Page のコンパイルのコンパイル– Page Page の表示の表示– Postback Postback 時の処理時の処理– オブジェクトの生存期間(オブジェクトの生存期間( PostbackPostback))– オブジェクトの生存期間(オブジェクトの生存期間( Response.RedirectResponse.Redirect))– オブジェクトの生存期間(オブジェクトの生存期間( Server.TransferServer.Transfer))

Web Web サービスサービス.NET Framework.NET Frameworkのメモリ管理のメモリ管理

Page 3: 20050623 2

Framework Framework って何?って何?直訳すると「型枠」直訳すると「型枠」ハリウッドの原則ハリウッドの原則– ““Don't call me, we call you.”Don't call me, we call you.”

プログラムは プログラムは Framework Framework から呼び出されるから呼び出される- 枠にあてはめてプログラムを作成する- 枠にあてはめてプログラムを作成する

.NET Framework.NET Framework

WindwosWindwosアプリケーションアプリケーション

WebWebサービスサービス

WebWebアプリケーションアプリケーション

Page 4: 20050623 2

動作の基本動作の基本Console Console アプリケーションのコンパイルアプリケーションのコンパイル

ソースコードをコンパイルすることで、アソースコードをコンパイルすることで、アセンブリ(センブリ( exeexeファイル)ができるファイル)ができる

アセンブリは アセンブリは MSIL MSIL という中間言語で書という中間言語で書かれており、メタデータやリソースを含んかれており、メタデータやリソースを含んでいるでいる

Page 5: 20050623 2

動作の基本動作の基本ConsoleConsoleアプリケーションの実行アプリケーションの実行

アセンブリがメモリ上にロードされるアセンブリがメモリ上にロードされる– このとき、セキュリティの確認が行われるこのとき、セキュリティの確認が行われる

アセンブリのエントリポイント( アセンブリのエントリポイント( Main Main メソッメソッド)がド)が Framework Framework によって呼び出されるによって呼び出される

メソッドが最初に呼ばれたときに メソッドが最初に呼ばれたときに JIT JIT コンパイコンパイラによってネイティブコードに変換されるラによってネイティブコードに変換される– ネイティブコードへの変換はメソッド単位で行われるネイティブコードへの変換はメソッド単位で行われるコード変換時に型のチェック、メモリの利用状況コード変換時に型のチェック、メモリの利用状況がチェックされるがチェックされるコード変換されたメソッドはキャッシュされ、同コード変換されたメソッドはキャッシュされ、同じメソッドが呼ばれる場合はコード変換は行われじメソッドが呼ばれる場合はコード変換は行われないないMain Main メソッドの終了により、アプリケーションメソッドの終了により、アプリケーション終了終了

Page 6: 20050623 2

WindowsWindowsアプリケーションアプリケーションイベントの処理イベントの処理

ConsoleConsoleアプリケーションと同じ手順で実行が開始されアプリケーションと同じ手順で実行が開始されるるApplication.Run Application.Run によってによって WindowsWindowsのメッセージループのメッセージループと結びつけられると結びつけられる– class WinSample : Formclass WinSample : Form

{{ ・・・ ・・・

     public static void Main()public static void Main()     {{         Application.Run(new WinSample());Application.Run(new WinSample());     }}}}

WindowsWindowsが受け取ったイベントはが受け取ったイベントは FrameworkFrameworkを通じて実を通じて実行中のアプリケーションに送られ、そのイベントに設定行中のアプリケーションに送られ、そのイベントに設定したメソッドが呼び出されるしたメソッドが呼び出されるApplication.Run Application.Run に渡した に渡した Form Form が閉じられることによが閉じられることによりアプリケーション終了りアプリケーション終了

Page 7: 20050623 2

WebWebアプリケーションアプリケーションPagePageのコンパイルのコンパイル

ブラウザからのリクエストに応じた ブラウザからのリクエストに応じた aspx aspx ページが解析され、ソースが自動生成されページが解析され、ソースが自動生成されるる– DebugDebugモードではこのソースが保存されるモードではこのソースが保存される– %windir%\Microsoft.NET\Framework\v1.1.4322\Temporary %windir%\Microsoft.NET\Framework\v1.1.4322\Temporary

ASP.NET Files ASP.NET Files 以下にフォルダが自動生成される以下にフォルダが自動生成される

ソースをコンパイルしたアセンブリ(ソースをコンパイルしたアセンブリ( dll dll ファイル)も一時フォルダに保存されるファイル)も一時フォルダに保存されるbin bin フォルダにある フォルダにある dll dll ファイルも一時フファイルも一時フォルダに保存されるォルダに保存される

Page 8: 20050623 2

WebWebアプリケーションアプリケーションPagePageの表示の表示

アセンブリがメモリ上にロードされるアセンブリがメモリ上にロードされるPagePageクラスがインスタンス化されるクラスがインスタンス化されるFrameworkFrameworkによって、決められた順番でイベントが呼び出されるによって、決められた順番でイベントが呼び出される(( TraceTraceモードで確認)モードで確認)– InitInit

Page_Init Page_Init 内に記述した処理の実行内に記述した処理の実行– LoadLoad

Page_Load Page_Load 内に記述した処理の実行内に記述した処理の実行– PreRenderPreRender

Page_PreRender Page_PreRender 内に記述した処理の実行内に記述した処理の実行– SaveViewSateSaveViewSate

コントロールの現在の状態を コントロールの現在の状態を ViewState ViewState に保存に保存– RenderRender

Page Page の内容を の内容を HTML HTML として生成として生成メソッド毎にメソッド毎に JITJITコンパイラによってネイティブコードに変換されるコンパイラによってネイティブコードに変換されるRender Render の結果、生成された の結果、生成された HTML HTML がブラウザに返され、がブラウザに返され、 Page Page ククラスが破棄されるラスが破棄される

Page 9: 20050623 2

WeWebアプリケーションbアプリケーションPostback Postback 時の処理時の処理

FrameworkFrameworkによって呼び出されるイベントが増えるによって呼び出されるイベントが増える– InitInit– LoadViewStateLoadViewState

ViewState ViewState の値の読み込みの値の読み込み– ProcessPostDataProcessPostData

ポストされた値の処理ポストされた値の処理– LoadLoad– ProcessPostDataSecondTryProcessPostDataSecondTry

動的に生成されるコントロールに対するポストされた値の処理動的に生成されるコントロールに対するポストされた値の処理– RaiseChangedEventsRaiseChangedEvents

プロパティが変更されたコントロールへのイベントの発行プロパティが変更されたコントロールへのイベントの発行– RaisePostBackEventRaisePostBackEvent

PostBack PostBack イベントに関連づけられているコードの実行イベントに関連づけられているコードの実行– PreRenderPreRender– SaveViewStateSaveViewState– RenderRender

Page 10: 20050623 2

Web アプリケーションの動作

Page 11: 20050623 2

WeWebアプリケーションbアプリケーションオブジェクトの生存期間(オブジェクトの生存期間( PostBackPostBack))

リクエストリクエスト

レスポンスレスポンス

ポストバックポストバック

レスポンスレスポンス

ブラウザ

ブラウザ

生成生成

破棄破棄

生成生成

破棄破棄

値の引継ぎは

値の引継ぎは

ビューステー

トで

ビューステー

トで

A.aspxA.aspx

Page 12: 20050623 2

WeWebアプリケーションbアプリケーションオブジェクトの生存期間オブジェクトの生存期間(( Response.RedirectResponse.Redirect))

リクエストリクエスト

レスポンスレスポンス

リダイレクトリダイレクト

レスポンスレスポンス

ブラウザ

ブラウザ

生成生成

破棄破棄

生成生成

破棄破棄

値の引継ぎは

値の引継ぎは

セッションオブジェクトで

セッションオブジェクトで

A.aspxA.aspx BB.aspx.aspx

Page 13: 20050623 2

WeWebアプリケーションbアプリケーションオブジェクトの生存期間オブジェクトの生存期間(( Server.TransferServer.Transfer))

リクエストリクエスト

レスポンスレスポンス

ブラウザ

ブラウザ

生成生成

破棄破棄

生成生成

破棄破棄

値の引継ぎは

値の引継ぎは

セッションオブジェクト

セッションオブジェクト

またはコンテキスト経由で

またはコンテキスト経由で

A.aspxA.aspx BB.aspx.aspx

TransferTransfer

Page 14: 20050623 2

WebWebサービスサービスWeb Web アプリケーションの仕組みがベースアプリケーションの仕組みがベースとなっているとなっているブラウザからのリクエストに応じたクラスブラウザからのリクエストに応じたクラス

がインスタンス化されるところまでは がインスタンス化されるところまではWeb Web アプリと同じアプリと同じリクエストで指定されたメソッドがリフレリクエストで指定されたメソッドがリフレクションを利用して呼び出されるクションを利用して呼び出される

メソッドの戻り値が メソッドの戻り値が SOAP SOAP 形式に変換さ形式に変換され、自動的に呼び出した側に戻されるれ、自動的に呼び出した側に戻されるメソッドの処理が終わるとクラスは破棄さメソッドの処理が終わるとクラスは破棄されるれる

Page 15: 20050623 2

.NET Framework.NET Frameworkのメモリ管理のメモリ管理オブジェクトが利用しているメモリ領域はオブジェクトが利用しているメモリ領域はFramework Framework が管理するが管理する– GC GC (ガベージコレクト)により不要になった(ガベージコレクト)により不要になったメモリ領域は開放されるメモリ領域は開放される

GCGCが実行されるまでは開放されないが実行されるまでは開放されない– GCGCの実行のタイミングはの実行のタイミングは FrameworkFrameworkによりにより管理されている管理されている

Windows Windows のリソースを利用するものにつのリソースを利用するものについては注意が必要いては注意が必要– Dispose Dispose パターンを理解しようパターンを理解しよう– C#C# の場合は の場合は using using ステートメントを使用するステートメントを使用する