获取当前站点/网站/列表的最佳方法是什么?
选项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。