WSS中的SPSite和SPWeb为什么需要释放内存,如何快速发现代码中的未释放内存
本内容为翻译微软的官方文档和一些国外的blog的内容,详细这些内容的原文可以参看
http://www.cnblogs.com/virusswb/archive/2009/11/05/1596495.html
为什么需要释放内存
在众多的sharepoint对象中模型中,主要是SPSite类和SPWeb类的对象,虽然是使用托管代码创建。但是,这些对象主要使用非托管的代码和内存进行工作。对象中的托管部分相比较非托管部分来说,所占比例非常小。因为占比较小的托管部分不给垃圾回收期任何压力,垃圾回收器不会定时回收管理这些对象使用的内存。使用大量非托管内存的对象,可能会引起一些异常的行为。例如:
1)WSS的应用程序池频繁回收,尤其是在使用的高峰期
2)应用崩溃
3)IIS占用大量内存
4)系统和应用性能差
在WWS中调用实现IDisposable接口的对象,一定要在这些对象使用完毕之后释放他们。你不应该依赖于垃圾回收器自动释放他们所占用的内存。
因为在SPSite和SPWeb的内部会调用internal class Microsoft.SharePoint.Library.SPRequest,这个对象使用非托管的Com资源,所以你可以通过一种简单的方式来发现你的代码中是否有没有释放的内存。
打开C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\LOGS\目录中的日志文件,F3查询SPRequest或者是dispose,仔细看看是否有AN SPRequest object was not disposed before the end of this thread之类的描述,应该就是没有释放的问题。
应用程序池的内存消耗峰值的设置应该根据应用的运行状况进行调整,当你的应用性能下降的时候,你应该观察C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\LOGS\目录中的日志文件,看看到底创建了多少SPRequest对象,是否创建了过多的SPRequest对象。即使没有正确的释放内存还没有影响你的应用性能,你也应该重新设计你的站点和代码,以减少过量创建SPRequest导致的内存消耗问题。
转载于:https://www.cnblogs.com/virusswb/archive/2009/11/06/1597184.html
WSS中的SPSite和SPWeb为什么需要释放内存,如何快速发现代码中的未释放内存相关推荐
- eclipse功能template(模板)学习。e.g : 快速在代码中插入时间戳
说些题外话. 自己属于半路出家入行码农的类型,基础算不上好,需要大量的时间夯实. 幸好,赶上网易云课堂开放.可以花费些时间,来好好学习一下. 在此,也是特别推荐有心学习coding的同学,可以去看看. ...
- 怎么把xml文件到url post方法 android,如何在android中使用http post发送xml文件.我把xml文件放在代码中...
创建xml文件 DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); dbfac.setNamespaceAware ...
- 如何解决代码中if…else 过多的问题
前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...
- 软件测试学习笔记:找代码中的fault,并设计特定的测试用例
观察两段代码: (1) 发现代码中的错误: (2) 设计测试用例,不执行fault部分: (3) 设计测试用例,执行fault部分,但不出现error情况: (4) 设计测试用例, 出现error情况 ...
- sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...
软件项目实训及课程设计指导--如何应用GOF设计模式中的构建者模式创建复合对象实例 1.GOF设计模式中的构建者模式 构建者设计模式能够将一个复杂对象(它一般为组合类)的构建过程与它的表示部件相互分离 ...
- 在hadoop/hbase等代码中kinit
在hadoop/hbase等代码中kinit @(HBASE)[hadoop, hbase, storm, kafka] (一)在java代码中kinit的方法 使用hadoop的UserGroupI ...
- Android在代码中设置drawableLeft(Right/Top/Bottom)
根据业务的需要,要在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom属性. 我们知道在xml中设置的方法为: android: ...
- matlab检查错误 函数,检查代码中的错误和警告
调整代码分析器消息指示标记和消息 根据您在完成 MATLAB 文件时所处的阶段,您可能需要限制代码下划线标记的使用.您可以使用步骤 1 的检查代码中的错误和警告中引用的代码分析器预设执行此操作.例如, ...
- 编写MR代码中,JAVA注意事项
在编写一个job的过程中,发现代码中抛出 java.lang.UnsupportedOperationException 异常. 编写相似逻辑的测试代码: 1 String[] userid = {& ...
最新文章
- Spring4整合Hibernate4出现的错误的解决
- linkedlist 置顶
- 谁说Vim不是IDE?(四)
- SQL查询库、表,列等的一些操作
- 【JavaScript基础系列】决定你的人生能走多远的,是基础。
- 使用keepalived搭建双机热备高可用一览
- itex将html转成pdf加水印,itext操作PDF文件添加水印
- MySQL10061错误Access denied for user root@localhost(Windows下)
- 小米9全面现货还降价,米粉却心情复杂?
- 云计算教程学习入门视频课件:什么是中间件?
- 【Linux】七种运行级别
- 学java编程语言_对于零基础的人而言 该如何学Java编程语言
- 【SCIRLab】ACL20 基于图注意力网络的多粒度机器阅读理解文档建模
- scrapy报错:ModuleNotFoundError
- java的几个设计模式
- 螺杆式、离心式、活塞式冷水机组及品牌
- kvm几种快照的创建与删除
- 正式-日常作息(2020.11)
- Codeforces Round #143 (Div. 2)-D. Magic Box
- 专转本计算机题型英语,2006江苏专转本计算机 2006-2011江苏专转本英语真题及答案.doc...
热门文章
- C++ 读入优化与输出优化 模板
- linux下线程不需要死循环么,Linux多线程程序死循环问题调试
- 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...
- ensp支持哪个版本virtualbox_如何在 Fedora 中安装 VirtualBox
- XML与Web数据挖掘
- 固定资产拆分比例怎么计算_持有的基金要被份额拆分?对收益有影响吗?
- win7 clr20r3程序终止_mscorsvw.exe是什么进程 win7系统怎么禁用mscorsvw.exe进程【禁用方法】...
- npm 安装yarn_问题解决记录-npm和yarn全局安装成功后命令无法执行的问题
- python后端服务器_毕设里配合Python后端使用的所谓”CGI服务器“
- HDU 1232 - 畅通工程