Edw*_*lde 18 sharepoint dispose
更新日期06/08/2009 15:52:简短回答NO.原始问题:
我找不到任何关于SPWeb.Site关于处理的指导.我已经阅读了一些关于处理SharePoint对象的最流行的最佳实践文档:
不幸的是,这些指南都没有提到SPWeb.Site.为了给出一些上下文,我正在编写一个公共扩展API,它接受SPWeb作为方法的参数,即:
public static void GetWebPartFromCatalog(this SPWeb web, string webPartName)
{
......
SPSite site = web.Site;
......
**OR** ??
using (SPSite site = web.Site)
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
我在SPWeb的refelector中看起来像是Close()方法,由SPWeb.Dispose()调用,并且它没有任何内容表明实际的SPSite成员字段被处理掉了.
更新:2009年8月6日13:47
在Alex的建议下
"将它放在一个运行100次的循环中,并使用WSS v3和MOSS 2007中的SPSite/SPWeb泄漏故障排除中描述的SPRequestStackTrace注册表项来检查您的测试代码是否是问题的根源."
我在webpart中运行了以下代码:
for (int i = 0; i < 100; i++)
{
using (SPWeb web = SPContext.Current.Site.OpenWeb(""))
{
SPSite site = web.Site;
Debug.WriteLine(site.Url);
}
}
Run Code Online (Sandbox Code Playgroud)
SharePoint日志中没有任何内容.
虽然我会毫不犹豫地从这个天真的实验中得出任何真正的结论,但它表明没有必要处置SPWeb.Site.从更加了解这个主题的人那里得到一个具体的答案真的很好.
更新:06/08/2009 14:52 Greg的评论提示我制定了m_Site的赋值,看起来它最终总是通过内部构造函数传递给SPWeb.例如SPWeb.OpenWeb通过在这个新的SPWeb().所以,我更确信SPWeb.Site应该不被布置,的确会产生问题,如果它是.
只是想到我的头顶(有时危险)......
如果没有SPSite,您似乎无法拥有SPWeb.因此,如果你没有通过SPSite获得SPWeb(通过执行新的SPSite或提供给你的那个),那么你可能不必担心处置SPSite.
不过,这只是猜想.好问题!
| 归档时间: |
|
| 查看次数: |
5870 次 |
| 最近记录: |