获取当前网站/网站/列表的最佳方式是什么?
选项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吗?其他建议?
答案 0 :(得分:4)
使用选项一,因为它不需要创建新对象,因为它更具资源效率(例如,OpenWeb方法涉及查询数据库以完成它的工作)。但是你不能从SPContext中处理对象,这肯定会给你带来麻烦。
如果您的代码未在应用程序页面(如SharePoint计时器或工作流程)的上下文中运行,则必须使用选项二,因为SPContext.Current对象将为null。
是的,如果您打开SPWeb或SPSite对象,you MUST dispose it。
答案 1 :(得分:2)
我通常使用选项2(我相信Microsoft推荐的方法),但我倾向于使用using
包装内容以确保它们被正确处理。例如:
using (SPSite site = new SPSite("MY SITE URL"))
{
using (SPWeb web= site.OpenWeb())
{
// Do stuff
}
}
此方法允许您明确何时创建和销毁对象。