赏梅斋

关注微软技术

博客园 首页 新随笔 联系 订阅 管理
  90 Posts :: 2 Stories :: 171 Comments :: 32 Trackbacks

 

Microsoft SharePoint Foundation 2010 和 Microsoft SharePoint Server 2010 对象模型中的对象可用作处理 SharePoint Foundation 数据的接口。开发人员经常调入对象模型以从 SharePoint Foundation 2010 和 SharePoint Server 2010 数据存储中读取数据或向其中写入新数据。

SharePoint Foundation 2010 和 SharePoint Server 2010 对象模型包含实现 IDisposable 接口的对象。使用这些对象时必须采取防范措施,防止它们长期保留在 Microsoft .NET Framework 使用的内存中。

具体地说,在使用完这些实现 IDisposable 的 SharePoint 对象后,应该明确释放它们。

在广泛使用 SharePoint 对象的情况下 - 例如,在使用自定义 Web 部件的 SharePoint 网站中 - 如果在使用完 SharePoint 对象之后不释放它们,则可能会导致以下异常行为。

  • SharePoint Foundation 应用程序池频繁进行回收,尤其是在使用高峰期

  • 应用程序崩溃,在调试程序中表现为堆损坏

  • Internet Information Services (IIS) 工作进程使用大量内存

  • 系统和应用程序性能低下

本文可用作指南指导您执行正确的过程来处理和释放实现 IDispose 的 SharePoint 对象。SharePoint 释放检查器工具也标记了本文中讨论的问题,此工具是一个可免费下载的程序,用于检查程序集中是否存在因不正确处理和释放 SharePoint 对象而导致内存泄露的编码实践。

为何要释放?

一些 SharePoint Foundation 对象(主要是 SPSite 类和 SPWeb 类对象)被创建为托管对象。但是,这些对象使用非托管代码和内存来执行其大多数工作。对象的托管部件比非托管部件小得多。因为较小的托管部件不会给垃圾收集器施加内存压力,所以垃圾收集器不会及时从内存中释放对象。如果对象使用大量非托管内存,则可能导致前面描述的某些异常行为。在 SharePoint Foundation 中处理 IDisposable 对象的调用应用程序在使用完这些对象后必须释放它们。不应该依赖垃圾收集器从内存中自动释放对象。

 

posted on 2011-02-11 17:40 赏梅斋 阅读(...) 评论(...) 编辑 收藏