为什么需要释放内存
在众多的sharepoint对象中模型中,主要是SPSite类和SPWeb类的对象,虽然是使用托管代码创建。但是,这些对象主要使用非托管的代码和内存进行工作。对象中的托管部分相比较非托管部分来说,所占比例非常小。因为占比较小的托管部分不给垃圾回收期任何压力,垃圾回收器不会定时回收管理这些对象使用的内存。使用大量非托管内存的对象,可能会引起一些异常的行为。例如:
1)WSS的应用程序池频繁回收,尤其是在使用的高峰期
2)应用崩溃
3)IIS占用大量内存
4)系统和应用性能差
在WWS中调用实现IDisposable接口的对象,一定要在这些对象使用完毕之后释放他们。你不应该依赖于垃圾回收器自动释放他们所占用的内存。
因为在SPSite和SPWeb的内部会调用internal class Microsoft.SharePoint.Library.SPRequest,这个对象使用非托管的Com资源,所以你可以通过一种简单的方式来发现你的代码中是否有没有释放的内存。
打开12\logs\目录中的日志文件,F3查询SPRequest或者是dispose,仔细看看是否有AN SPRequest object was not disposed before the end of this thread之类的描述,应该就是没有释放的问题。
1、缓存数据
Best Practices: Common Coding Issues When Using the SharePoint Object Model
2、内存泄露和释放
Best Practices: Using Disposable Windows SharePoint Services Objects
SharePoint 2007 and WSS 3.0 Dispose Patterns by Example