获取当前站点/网站/列表的最佳方法是什么?

选项1-重用现有对象

        SPSite site = SPContext.Current.Site;
        SPweb web = SPContext.Current.Web;
        SPList list = SPContext.Current.List;

选项2-创建新对象
        SPSite site = new SPSite(SPContext.Current.Site.ID); // dispose me
        SPweb web = site.OpenWeb(SPContext.Current.Web.ID); // dispose me
        SPList list = web.Lists[SPContext.Current.List.ID];

在某些情况下使用选项1时遇到问题。从那时起,我选择了第二个选项,到目前为止效果很好。

你对这个有什么看法?我通常最好选择选项2?还有其他建议吗?

最佳答案

请使用选项一,因为它不需要创建新对象就可以节省更多资源(例如,OpenWeb方法涉及查询数据库来完成它的工作)。但是不允许您从SPContext中处置对象,这肯定会给您带来问题。

如果您的代码未在应用程序页面的上下文中运行(例如SharePoint计时器或工作流),则必须使用选项2,因为SPContext.Current对象将为null。

Link

是的,如果您打开SPWeb或SPSite对象you MUST dispose it

10-07 14:06