我应该处置这个 SPWeb 吗?

发布于 2024-11-15 13:16:19 字数 277 浏览 4 评论 0原文

我希望有人能帮助我。我需要从 SPContext 获取当前站点的根 Web。通过以下操作可以轻松完成

SPContext.Current.Site.RootWeb

我对 SPContext.Current.Site.RootWeb 处的 SPSite 对象不应该被丢弃的想法感到满意,但是我得到的 SPWeb 对象又如何呢?来自 SPS 站点。当 SPSite 被处置时,rootweb SPWeb 也会被处置吗?还是我需要自己处理掉它?

I'm hoping someone can help me out. I need to get the root web of the current site from the SPContext. It's easily done with the following

SPContext.Current.Site.RootWeb

I'm comfortable with the idea that the SPSite object here at SPContext.Current.Site.RootWeb shouldn't be disposed of, but what about the SPWeb object I'm getting from the SPSite. Will, when the SPSite get's disposed, the rootweb SPWeb get disposed to? Or do I need to dispose of it myself?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

快乐很简单 2024-11-22 13:16:19

不应释放对 SPSite.RootWeb 的调用。处置 SPSite 也会处置 RootWeb。

SPDisposeCheck 中有一个错误,如果您确实处置它,它会标记,如果您不处置(无论哪种方式都该死!)我详细介绍了我如何解决这个问题 在此博文中,因为您无法使用 SPDisposeCheckIgnore提升权限块中的属性。

Calls to SPSite.RootWeb should not be disposed. Disposing the SPSite will also dispose the RootWeb.

There is a bug in SPDisposeCheck where it flags if you do dispose it, and if you don't (damned either way!) I detailed how I solved this in this blog post, as you can't use an SPDisposeCheckIgnore attribute in elevated privileges blocks.

柏拉图鍀咏恒 2024-11-22 13:16:19

不,你不应该。您应该只处置您可以控制的物体。由于上下文是由 SharePoint 创建的,因此您无需处理它,因为其他对象可能依赖于它。

如果您要从该对象属性创建您自己的 SPWeb 实例,则需要将其释放。 IE。

using (SPSite site = new SPSite(SPContext.Current.Site.RootWeb.Url))
using (SPWeb web = site.OpenWeb()) {
 // do something
}

这是一篇有关处理 SharePoint 对象的最佳实践的文章。

http://msdn.microsoft.com/en-我们/library/aa973248(v=office.12).aspx

No you should not. You should only dispose objects you are in control of. Because the context is something created by SharePoint you do not dispose of this as other objects may be dependent upon this.

If you were to create your own instance of an SPWeb from this objects properties than it would need to be disposed. I.e..

using (SPSite site = new SPSite(SPContext.Current.Site.RootWeb.Url))
using (SPWeb web = site.OpenWeb()) {
 // do something
}

Here is an article on the best practices of disposing SharePoint objects.

http://msdn.microsoft.com/en-us/library/aa973248(v=office.12).aspx

撩起发的微风 2024-11-22 13:16:19

通常应在 using 子句中使用 SPSite 和 SPWeb。

using (SPSite site = new SPSite("http://mysite.sharepoint.com"))
{
    using (SPWeb web = site.OpenWeb())
    {
        // TODO: code for using SPWeb object
    }
}

在您使用完 SPWeb 对象后,这将自动正确地释放它。

You should normally use SPSite and SPWeb in a using clause.

using (SPSite site = new SPSite("http://mysite.sharepoint.com"))
{
    using (SPWeb web = site.OpenWeb())
    {
        // TODO: code for using SPWeb object
    }
}

This automatically will correctly release the SPWeb object after you are done with it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文