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

发布于 2024-10-05 06:09:21 字数 1233 浏览 3 评论 0原文

我对此很困惑。在增强 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 中使用此函数的原因是,这是对可能没有关联用户的另一个列表的子查询到该项目。 对此的任何帮助将不胜感激。

I am quite stumped with this. In enhancing an existing feature to a SharePoint solution, I found that they were querying the Wss_Content directly. Knowing I should not be using that stored procedure, I used the SharePoint object model to retrieve the users group information from the userName. What's burning me is that it is slower then the stored procedure. Is there a smarter/faster way to get this information? We are using SharePoint 2007. Below is roughly what the function does:

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

and the Stored Procedure code is:

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 the reason I have this in a try-catch is that this is a sub-query to another list that might not have a user associated to the item.
Any help in this would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不吻晚风 2024-10-12 06:09:21

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

此外,您还引用了 SPSite 和 SPWeb 对象,但没有释放该对象,这也存在固有的性能问题。

How are you calling that code? If you are using this inside a console application then yes it will be slower, it needs to fire up the supporting objects that are normally live when using this inside a native sharepoint context.

Also you are referencing an SPSite and SPWeb object without disposing of the object, this has inherent performance issues as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文