私はこれでかなり困惑しています。 SharePointソリューションの既存の機能を強化する際に、Wss_Contentに直接クエリを実行していることがわかりました。私はそのストアドプロシージャを使用すべきではないことを知って、SharePointオブジェクトモデルを使用してuserNameからユーザーグループ情報を取得しました。私を燃やしているのは、ストアドプロシージャよりも遅いということです。この情報をよりスマートに/より速く入手する方法はありますか?sharepointを使用したSharepointの速度に関する問題オブジェクトモデル:userIDからユーザーグループを取得
private string GetTitle(string userName)
{
string results = string.Empty;
try
{
SPSite spSite = new SPSite("http://devvm");
SPWeb spWeb = spSite.AllWebs[""];
SPUser user = spWeb.AllUsers["aspnetsqlmembershipprovider:" + userName];
SPGroupCollection groups = user.Groups;
results = groups[0].Name;
}
catch (Exception ex)
{
Console.WriteLine("Unable to find user" + userName);
results = "No Group Found";
}
return results;
}
とストアドプロシージャのコードは次のとおりです:私たちは、以下のSharePoint 2007を使用していると、機能が何をするか大体です
SELECT @role=Groups.Title
FROM WSS_Content.DBO.UserInfo Info
LEFT JOIN WSS_Content.DBO.GroupMembership Membership
ON Info.tp_ID=Membership.MemberID
LEFT JOIN Wss_Content.DBO.Groups Groups
ON Membership.GroupID=Groups.ID
WHERE tp_Login='aspnetsqlmembershipprovider:' + @username
FYI私はのtry-catchでこれを持っている理由は、これがあることですアイテムに関連付けられたユーザーを持たない可能性のある別のリストへのサブクエリ。 これに関するお手伝いがあれば幸いです。
単純なwinformを使ってクエリをテストしました。私はフォームの負荷でSPSiteとSPWebを初期化しています。私はボタンを押すとメソッドを実行します。 SPDisposeチェックをありがとう、私は適切な処分を追加したが、以前より高速ですが、SQLクエリはまだ遅いです。負荷でSPSiteとSPWebを初期化しても、常に遅くなるはずですか? – mcauthorn
それはデータベースに直接アクセスするよりも常に遅くなりますが、質問はどれくらい正直なところ私はそれに答えることができません。私はあなたに比較を与えることができます。ワークフローでの処理を扱うクラスライブラリを作成しました。コンソールアプリケーションからクラスを呼び出すと、約7秒後に終了しました。 Sharepointワークフロー内では、約350msで実行されます。だから確かにネイティブ環境ははるかに高速です。 –