2010-12-02 9 views
1

私はこれでかなり困惑しています。 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でこれを持っている理由は、これがあることですアイテムに関連付けられたユーザーを持たない可能性のある別のリストへのサブクエリ。 これに関するお手伝いがあれば幸いです。

答えて

1

どのようにコードを呼び出していますか?これをコンソールアプリケーションの内部で使用している場合、それは遅くなります。ネイティブのSharepointコンテキスト内でこれを使用すると、通常は生きているサポートオブジェクトを起動する必要があります。

また、オブジェクトを破棄することなくSPSiteオブジェクトとSPWebオブジェクトを参照していますが、これにはパフォーマンス上の固有の問題もあります。

+0

単純なwinformを使ってクエリをテストしました。私はフォームの負荷でSPSiteとSPWebを初期化しています。私はボタンを押すとメソッドを実行します。 SPDisposeチェックをありがとう、私は適切な処分を追加したが、以前より高速ですが、SQLクエリはまだ遅いです。負荷でSPSiteとSPWebを初期化しても、常に遅くなるはずですか? – mcauthorn

+0

それはデータベースに直接アクセスするよりも常に遅くなりますが、質問はどれくらい正直なところ私はそれに答えることができません。私はあなたに比較を与えることができます。ワークフローでの処理を扱うクラスライブラリを作成しました。コンソールアプリケーションからクラスを呼び出すと、約7秒後に終了しました。 Sharepointワークフロー内では、約350msで実行されます。だから確かにネイティブ環境ははるかに高速です。 –

関連する問題