1

動的にコンパイルされたアセンブリをアンロードする(メモリを再利用する)唯一の方法がアプリドメインをアンロードすることであるとすると、SharePointは、この制限にぶつかることなく、特にマスターページとページレイアウトについて、VirtualPathProvidersにどのように依存しますか?

マスターページとページレイアウトが頻繁に更新および公開される場合、再起動はさまざまな設定によって遅延する可能性がありますが、完全に回避することはできません。

(これに関する情報の欠如は、公開パターンでは一般的ではない、より理論的な制限に起因しますか?アプリの不安定性を引き起こすマスターページまたはレイアウトへの変更の割合に個人的に気づきましたか?SharePointに警告を表示する必要がありますか?)

動的Webフォーム(デフォルトではMVCビューを含む)を活用するCMS風の機能は、変化率の不安定性の影響を受けやすいですよね?

コンパイルされていないページの更新:

コンパイルなしのページASP.NET2.0では、コンパイルモデルが大幅にリファクタリングされ、拡張されています。サイトの事前コンパイルは、おそらく最も人気があり、新機能の中で大声で要求されています。もう1つの非常に興味深い機能は、ページをコンパイルしないことです。それらは決してコンパイルされない特別なページです。では、コンパイルなしのページの最終的な目的は何ですか?また、静的HTMLページとの違いは何ですか?まず、@ PageディレクティブのCompilationMode属性をNeverに設定して、コンパイルなしのページを作成します。コンパイルなしのページが要求された場合、ページアセンブリは作成されず、ディスクに保持されません。代わりに、ページビルダーコンポーネントのインスタンスがメモリにキャッシュされ、すべてのリクエストのページ出力を作成するために使用されます。ページビルダーは、ページコントロールツリーを構築する際にページパーサーをサポートする特別なコンポーネントです。コンパイルがオンになっている場合、コンパイルするクラスを取得するためにコントロールツリーが使用されます。コンパイルがオフの場合、コントロールツリーを使用してマークアップを取得します。言うまでもなく、プログラマーに独自のコードをページに添付する力を与えたい場合は、クラスが必要です。ノーコンパイルページはサーバーコントロールとリテラルで構成されていますが、コードはまったく含まれていません。

コンパイルなしのページは、すべてのアプリケーションに対応しているわけではありません。これらは、数千ページの非常に大規模なWebサイトのスケーラビリティを向上させるためにのみ設計されています。コンパイルなしのページをコードファイルにバインドしたり、サーバー側のブロックを含めることはできません。コンパイルなしのページで許可される実行可能なコードは、$式のみです。コンパイルしないページには2つの主な利点があります。SharePointのような安全な環境では、コンパイルなしのページにより、開発者は、ホスティング環境に問題を引き起こしたり、さらには破壊したりする可能性のあるバグのあるコードを記述できなくなります。大規模なコンテンツベースのWebサイトでは、コンパイルしないページを使用すると、何千ものページをコンパイルする必要がなくなります。

参照:

1http://haacked.com/archive/2009/04/22/scripted-db-views.aspx

4

2 に答える 2

2

最初に注意することは、カスタマイズされたページ(マスターページまたはページレイアウトの場合があります)は常にデータベースに保存されるということです。

ページ要求サイクルは、SPVirtualPathProviderが要求をルーティングする方法がバニラASP.netバージョンとは異なります。カスタマイズされたページ(ファイルシステム上にあるカスタマイズされていないページではなく、通常のASP.netページコンパイルモードの対象)に対する要求が行われることが検出されると、ページのコードがデータベースからプルされ、ASPに渡されます。 .netランタイム、および「コンパイルなしモード」で解析されます。



カスタマイズされたページのリクエストが行われたときのプロセスの視覚的な表現は次のとおりです。

代替テキスト
シヴプラサドコイララを 褒め称える



ASP.netのコンパイルなしモードの適切な説明もあります

コンパイルページなし:コンパイルページ

なしでは、数千ページの大規模サイトのスケーリングを改善できます。これは、Windowsではアプリに読み込まれるDLLの数に制限があり、この制限に達するとパフォーマンスが低下するためです。<%@ Page ReplicationMode = "Auto"%>ディレクティブを設定して、条件付きでコンパイルし、コードの制限なしにスケーリングの利点を取得します。また、CompilationModeを「Never」に設定して、ページがコンパイルされないようにすることもできます。Web.configの<pages/>セクションでこのプロパティを設定して、アプリケーションのすべてのページに適用できます。コンパイルされていないページには、ユーザーコードが含まれている場合にエラーがスローされます。


したがって、これは基本的に、リアルタイムで発生する複数のカスタマイズによるアプリドメインのアンロード/ロード時の過度のアプリケーションリセットに関して言及した問題に対処します(ASP.netランタイムで構築されたCMSが対処する必要がある問題)。

これに加えて; この方法でカスタマイズされたコンテンツを保存すると、SQLServerのマルチユーザー機能とスケーラビリティを「無料」で利用できます。ロックを管理するために余分な労力を必要とするファイルシステムアプローチとは対照的です。

于 2009-10-16T22:46:20.043 に答える
0

この1の良い説明を見つけました:

開発者として、これに対する最初の反応は、カスタマイズされたページがコンパイルなしモードで処理される理由を疑問視することかもしれません。あなたの本能は、コンパイルされたページはコンパイルされていないページよりも速く実行されることをおそらくあなたに伝えます。ただし、特定のシナリオでは、コンパイルなしのページの方が効率的でスケーラブルになる可能性があります。これは、カスタマイズされたページの数が数千または数万に達する可能性がある大規模なWSS環境で特に当てはまります。

.NET Frameworkは、アセンブリDLLをメモリからアンロードするという概念を実際にはサポートしていないため、コンパイルされていないページをメモリにロードしてから、コンパイルされたページでは不可能な方法でアンロードできます。最も近い同等のものは、現在のWindowsプロセスまたは現在の.NETAppDomainをリサイクルすることです。ただし、このタイプのリサイクルには、最近使用されていないアセンブリDLLだけでなく、すべてのアセンブリDLLをメモリからアンロードすることが含まれます。さらに、.NET Frameworkでは、.NETAppDomainにロードできるアセンブリDLLの数に上限があります。

コンパイルなしのページは、新しいアセンブリDLLまたはマネージクラスをメモリにロードする必要がないため、より高いレベルのスケーラビリティを提供します。代わりに、コンパイルされていないページの処理には、制御ツリーをメモリにロードすることが含まれます。WSSは、カスタマイズされたページに関連付けられたコントロールツリーがアセンブリDLLにコンパイルされていないため、それらのメモリ使用量をより効率的に管理できます。たとえば、WSSはカスタマイズされたページの処理を完了すると、ページのコントロールツリーをアンロードして、他の目的のためにメモリを解放できます。さらに、コンパイルされないページにより、コンパイルプロセスを実行する必要がなくなり、最初のアクセス時のページの応答時間が実際に速くなります。

重要なポイントは、コンパイルされていないページをアンロードできること(関連するページビルダーをアンロードできること)です。これは、コンパイルされたページでは不可能です。ただし、基本的には、これはスケーラビリティの尺度であり(このモデルではより多くのページを処理できます)、パフォーマンスの向上ではありません(初期設定後、コンパイルされたページは、コンパイルされていないページよりもパフォーマンスが向上するはずです)。

1 - http://chiragrdarji.wordpress.com/2007/10/12/page-ghosting-unghosting-and-effect-of-pageghosting-on-performance-in-sharepoint-2007/

于 2009-10-17T15:04:53.353 に答える