使用sharepoint对象模型的Sharepoint速度问题:从userID获取用户的组

时间:2010-12-02 14:45:41

标签: sharepoint sharepoint-2007

我很难过。在将现有功能增强到SharePoint解决方案时,我发现他们直接查询Wss_Content。知道我不应该使用该存储过程,我使用SharePoint对象模型从userName检索用户组信息。让我烦恼的是它比存储过程慢。是否有更智能/更快捷的方式来获取此信息?我们正在使用SharePoint 2007.以下大致是该功能的作用:

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;
    }

和存储过程代码是:

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

因为我在try-catch中有这个的原因是这是对另一个列表的子查询,该列表可能没有与该项关联的用户。 任何帮助都将非常感谢。

1 个答案:

答案 0 :(得分:1)

你是如何调用该代码的?如果你在控制台应用程序中使用它,那么它会更慢,它需要在本机sharepoint上下文中使用它时启动通常是活动的支持对象。

此外,您在不丢弃对象的情况下引用SPSite和SPWeb对象,这也存在固有的性能问题。