2010-12-02 99 views
1

我非常难以忍受这一点。在增强SharePoint解决方案的现有功能时,我发现他们直接查询Wss_Content。知道我不应该使用该存储过程,我使用SharePoint对象模型从userName中检索用户组信息。什么让我着迷是它比存储过程慢。有更聪明/更快的方式来获取这些信息吗?我们正在使用SharePoint 2007下面大致函数功能:使用Sharepoint的Sharepoint速度问题对象模型:从用户ID获取用户组

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

你是怎么调用这个代码的?如果你在控制台应用程序中使用它,那么是的,它会变慢,它需要激活在本地共享点上下文中使用时支持的对象。

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

+0

我做了一个简单的winform来测试查询。我在表单加载中初始化SPSite和SPWeb。然后,当我按下按钮时执行该方法。感谢SPDispose检查,我添加了正确的配置,并且之前更快,但仍然比SQL查询更慢。即使我初始化负载上的SPSite和SPWeb,我是否应该始终期望速度更慢? – mcauthorn 2010-12-02 20:34:37

相关问题