アプリケーションライフサイクル全体で同じspweb&spsiteを保持しますか?
-
27-10-2019 - |
質問
多くのDALと一緒にいくつかのプロジェクトがあります。顧客、販売、C#クラスに反映されるプロバイダーなどの多くのSharePointリスト。抽象マザークラスを通じて、各オブジェクトを実装できるようにします。また、たとえばリストから顧客に顧客を獲得するたびに、発信者コードはcustomer.dispose()を呼び出して、オブジェクトをインスタンス化するために使用されるspwebとspsiteを処分する必要があります。
public Customer(int spListItemID):base(LIST_URL)
{
try
{
spli = Liste.GetItemById(spListItemID);
}
catch(ArgumentException)
{
spli = null;
}
}
また、コンストラクターベースクラスには、SPSITEおよびSPWEBグローバル変数が具体化されており、処分機能もあります。
私は疑問に思っていました:SharePointアプリケーション全体に同じSPWEBとSPSITEを使用してみませんか?私たちのプロジェクトはすべて、シングルトンパターンに従ってこれらのSPSiteとSPWEBをインスタンス化できるプロジェクトを知っています。また、このSPSiteとSPWEBを「永遠に」使用します。両方を閉じたり、すべてのオブジェクトに同じものを使用したりすることはありません。
それはクレイジーなアイデアだと思いますか、それは影響を与えるでしょうか?私は同じSPWEBを非常に長い間使用していることを意味します。つまり、サーバーがオンになっている時間です...それはそんなに悪い考えですか?インスタンス化ごとに1日あたり数千時間を閉じる代わりに? SPWEBには生きた期間が限られていますか? (それは多くの開発を伴う大きなSharePointアプリケーションです)
解決
最大のリスクは、SPWEBが時代遅れになる可能性があることです。マルチユーザー環境では、最初のラウンド旅行(たとえば - Webタイトル)でフェッチされたSPWEBプロパティは、別のユーザーによって変更されますが、新たにインスタンス化されていないため、古い値を持ち続けます。 SPWEBとSPSiteの複数のインスタンスを適切に処分している限り、複数のインスタンスを作成できます。