本内容为翻译微软的官方文档和一些国外的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为什么需要释放内存,如何快速发现代码中的未释放内存相关推荐

  1. eclipse功能template(模板)学习。e.g : 快速在代码中插入时间戳

    说些题外话. 自己属于半路出家入行码农的类型,基础算不上好,需要大量的时间夯实. 幸好,赶上网易云课堂开放.可以花费些时间,来好好学习一下. 在此,也是特别推荐有心学习coding的同学,可以去看看. ...

  2. 怎么把xml文件到url post方法 android,如何在android中使用http post发送xml文件.我把xml文件放在代码中...

    创建xml文件 DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); dbfac.setNamespaceAware ...

  3. 如何解决代码中if…else 过多的问题

    前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...

  4. 软件测试学习笔记:找代码中的fault,并设计特定的测试用例

    观察两段代码: (1) 发现代码中的错误: (2) 设计测试用例,不执行fault部分: (3) 设计测试用例,执行fault部分,但不出现error情况: (4) 设计测试用例, 出现error情况 ...

  5. sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...

    软件项目实训及课程设计指导--如何应用GOF设计模式中的构建者模式创建复合对象实例 1.GOF设计模式中的构建者模式 构建者设计模式能够将一个复杂对象(它一般为组合类)的构建过程与它的表示部件相互分离 ...

  6. 在hadoop/hbase等代码中kinit

    在hadoop/hbase等代码中kinit @(HBASE)[hadoop, hbase, storm, kafka] (一)在java代码中kinit的方法 使用hadoop的UserGroupI ...

  7. Android在代码中设置drawableLeft(Right/Top/Bottom)

    根据业务的需要,要在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom属性. 我们知道在xml中设置的方法为: android: ...

  8. matlab检查错误 函数,检查代码中的错误和警告

    调整代码分析器消息指示标记和消息 根据您在完成 MATLAB 文件时所处的阶段,您可能需要限制代码下划线标记的使用.您可以使用步骤 1 的检查代码中的错误和警告中引用的代码分析器预设执行此操作.例如, ...

  9. 编写MR代码中,JAVA注意事项

    在编写一个job的过程中,发现代码中抛出 java.lang.UnsupportedOperationException 异常. 编写相似逻辑的测试代码: 1 String[] userid = {& ...

最新文章

  1. 用Python数据分析告诉你:复联哪个英雄人气最高?
  2. Java Daemon线程
  3. 采用 facebook 的prophet 预测科大讯飞的股票开盘价
  4. uml+oopc嵌入式c语言开发精讲_当前火爆的嵌入式领域,为什么选择C语言作为开发语言?了解一下...
  5. 【重复制造精讲】REM Pull List 拉料单(续)
  6. 手写单隐层神经网络_鸢尾花分类(matlab实现)
  7. MySQL的事务与事务隔离
  8. jsp项目放入宝塔windows环境_商业裂变,之项目技术实战(第八节:宝塔面板介绍)...
  9. C++面试题-指针-指针数组与数组指针
  10. java t800,T800KPI绩效考核系统C#源码
  11. hbase权威指南-客户端API高级特性
  12. 未来教育计算机二级第十八套ppt,未来教育.ppt
  13. 虚拟机VM安装win7遇到的问题及解决方法
  14. JS Enter键实现Tab键功能,回车键实现tab功能
  15. 研究生英语面试常见问题及回答
  16. NPN 、PNP 三极管开关形式的典型接法(注意上下拉电阻)
  17. 2019 年 (C题) 线路负载及故障检测装置
  18. 写给女孩:二十岁之后的每一年都很重要
  19. 【QT网络编程】实现UDP协议通信
  20. 学习post抓包最好用的抓包工具

热门文章

  1. 判断点是否在凸多边形内
  2. controller层没反应_埋地管道防腐层探测检漏仪FJ-10地下管线探测仪的说明及应用...
  3. [总结] 网络流最大流算法反向边的作用
  4. 对应 网口_威纶通网口屏和西门子1200/1500绝对地址实现通讯
  5. ktor框架用到了netty吗_如何使用 Ktor 快速开发 Web 项目
  6. linux进程授权,一个linux小程序的免授权或通用授权
  7. 斗鱼实名认证 mysql_斗鱼扩展--DouyuRoom使用说明(十四)
  8. html的head中的常见元素
  9. 09_Redis持久化——AOF方式
  10. UVALive - 7270 Osu! Master