js内存泄露问题题求助System.OutOfMemoryException

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。System.OutOfMemoryException: 内存不足。? - 知乎6被浏览1187分享邀请回答78 条评论分享收藏感谢收起1添加评论分享收藏感谢收起SQL Server出现System.OutOfMemoryException异常的解决方法
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了SQL Server出现System.OutOfMemoryException异常的解决方法,同时提供了微软官方的解决方案,需要的朋友可以参考下
今天在用SQL Server 2008执行一个SQL脚本文件时,老是出现引发类型为“System.OutOfMemoryException”的异常错误,脚本明明是从SQL Server 2008导出的,应该不会出错,研究了好久问题才得以解决。
出现这个错误的主要原因是由于SQL脚本文件太大,估计超过了100M了,解决方法就是把脚本文件分成几个脚本文件,分别去执行即可。
来自微软官方的解决方案:
因为计算机没有足够的内存来完成请求的操作,则会出现此问题。
在 SQL Server 2000 Reporting Services 的限制会导致内存绑定的处理报告的某些部分。例如,查询结果处理和对象模型呈现受限于内存。
计算机没有足够的内存来完成请求的操作在一个或多个下列条件都为真:
1.一个报告是太大或太复杂。
2.其他正在运行的进程的费用是非常高的。
3.计算机的物理内存是太小。
处理报表,则分两个阶段。两个阶段是执行和呈现。在执行阶段期间或在呈现阶段,会出现此问题。
如果在执行阶段中,会出现此问题,此问题很可能是因为太多的内存消耗在查询结果中返回的数据。此外,下列因素会影响内存消耗,在执行阶段:
5.自定义代码
如果在呈现阶段中会发生此问题,原因被与该报表显示何种信息以及报表显示信息的方式。
1.数量和类型的控件
2.这些控件之间的关系
3.格式设置
4.显示的数据量
解决方案:
若要解决此问题,请使用下列方法之一。
向计算机中添加足够的物理内存。
注意如果您超过 2 千兆字节 (GB) 的内存可以启用该 / 3gb 切换在 Boot.ini 文件中为更好的性能。 有关如何在 SQL Server 中使用了 / 3gb 开关的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
274750如何配置 SQL Server 使用 2 GB 以上物理内存
将报告计划安排为在内存限制时较低的非高峰时段运行。
调整所在进行相应设置。
注意:呈现时通过报告服务 Web 服务的报告,该报告服务 Web 服务从 Machine.config 文件中获得所在。但是,计划的报告呈现由报表服务器的 Windows 服务。报表服务器的 Windows 服务获取从 RSReportServer.config 文件的所在。
有关所在的详细信息,请参阅"更多信息"一节。
升级到 64 位版本的 Microsoft SQL Server 2005年报告服务。
重新设计该报表。若要执行此操作,请使用下列方法之一。
重新设计报表查询。通过重新设计报表查询,通过以下方法,可以减少内存消耗:
1.报告查询中返回更少的数据。
2.在报告查询的 WHERE 子句中使用的一个更好的限制。
3.移动到数据源的复杂的聚合。
将报表导出为其他格式。通过使用不同的格式来显示报表,您可以减少内存占用。下表列出了几个按顺序从大多数内存消耗到最低的内存消耗的导出格式。
代码如下:格式&&&&说明
Microsoft Excel&&呈现在 Excel 中的报表
(TIFF) 图像&&&将报表呈现为静态图像的面向页的格式
PDF&&&&&呈现报表采用可移植文档格式 (PDF)
HTML&&&&呈现到浏览器在 HTML 报表
CSV&&&&&呈现报表以逗号分隔的格式 ;在与 CSV 文件格式关联的查看工具中打开报表
XML&&&&&呈现报表的 XML ;在浏览器中打开报表
注意:如果没有应用 XSLT 转换,这种格式将消耗比 CSV 格式所消耗的内存更少。
简化报表设计。可以通过以下方式简化报表设计减少内存消耗:
1.在报告中包含更少的数据区域或控件。
2.钻取报表用于显示详细信息。
此外,如果报告的目的是只是数据的集合,可用于其他 Microsoft 产品更好的性能。例如,您可以使用数据转换服务 (DTS) 或 Microsoft SQL Server 2005年集成服务。
下面的示例演示了如何解决此问题。请考虑下面的示例:
1.以 PDF 格式,并以 Excel 格式,无法呈现在报表管理器返回 160 页的报告。当使用 8.5 × 11 英寸页面尺寸时,报表可能远远超过 250 页。
2.报表的数据源返回报表服务器 500 兆字节 (MB) 的数据。通常情况下,SQL Server 2000年报表服务要求数据集所使用的内存量的两到三倍。因此,SQL Server 2000年报告服务需要几乎 1.5 GB 的内存来呈现该报表。
若要解决此问题,在此示例中,重新设计报表,以显示该报表仅为有限的一组筛选器值的汇总数据。此外,请确保聚合发生在报告数据中提取数据库查询和聚合中的报告本身不是。这些方法有助于大大减少到报表服务器返回的数据量。因此,成功地并更快地呈现报表。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具2012年 总版技术专家分年内排行榜第一2007年 总版技术专家分年内排行榜第二2006年 总版技术专家分年内排行榜第二2004年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第三2003年 总版技术专家分年内排行榜第三2002年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
2012年 总版技术专家分年内排行榜第一2007年 总版技术专家分年内排行榜第二2006年 总版技术专家分年内排行榜第二2004年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第三2003年 总版技术专家分年内排行榜第三2002年 总版技术专家分年内排行榜第三
本帖子已过去太久远了,不再提供回复功能。4194人阅读
技术(32)
之所以发生System.OutOfMemoryException这个问题,是因为多处理器(或多核心)计算机上的 .NET CLR 的 Garbage Collection (GC) 机制默认是使用 Server Mode (服务器模式) 在运行的,换句话说,就是「每一颗 CPU 都会有独立的 GC 内存空间(堆栈, Heap)」,所以如果你的 GC 内存空间 用掉了 500MB 且你有 4 颗 CPU 的话,就等于耗费了 2GB 的内存,进而发生 System.OutOfMemoryException 异常!
要解决这个问题的方式就是将 GC 设置为 Workstation Mode (工作站模式),这样就可以整台主机共享同一个 GC Heap,以节省内存的使用。要将预设的 GC 修改成 Workstation Mode 必须要修改 %WINDIR%/Microsoft.NET/Framework/v2.0.50727/Aspnet.config 配置文件 ( 如果是 .NET 1.1 要修改 %WINDIR%/Microsoft.NET/Framework/v1.1.4322/Aspnet.config 配置文件 ):
预设的 Aspnet.config 长这样:
&?xml version="1.0" encoding="UTF-8" ?&
&configuration&
&&& &runtime&
&&&&&&& &legacyUnhandledExceptionPolicy enabled="false" /&
&&&&&&& &legacyImpersonationPolicy enabled="true"/&
&&&&&&& &alwaysFlowImpersonationPolicy enabled="false"/&
&&&&&&& &SymbolReadingPolicy enabled="1" /&
&&& &/runtime&
&/configuration&
需加上一行 &gcServer enabled="false"/& 如下:
&?xml version="1.0" encoding="UTF-8" ?&
&configuration&
&&& &runtime&
&&&&&&& &gcServer enabled="false" /&
&&&&&&& &legacyUnhandledExceptionPolicy enabled="false" /&
&&&&&&& &legacyImpersonationPolicy enabled="true"/&
&&&&&&& &alwaysFlowImpersonationPolicy enabled="false"/&
&&&&&&& &SymbolReadingPolicy enabled="1" /&
&&& &/runtime&
&/configuration&
这样就设置完成了!
不过像这种出现 Out of Memory 的异常在 64 位的操作系统中几乎不会出现问题,所以如果你是使用 64 位的操作系统(如:Windows Server 2003 64bit ) 的话,是不太需要做这样的调整的,但你的内存还是要够多才行,否则过多的分页状况还是会降低你 ASP.NET 应用程序的执行性能!
除了这点之外,在正式(Production)环境中的 ASP.NET 应用程序一定要在 web.config 中关闭开发时期设定的 debug 与 trace,才不会对内存造成额外的负担。因为 ASP.NET 应用程序在启用 debug mode 的时候所有的 Symbol 檔(*.pdb)都会被加载到内存中,不但会消耗不少内存,也会降低执行效能。详情请见微软知识库:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:64240次
排名:千里之外
原创:13篇
转载:32篇
评论:11条
(1)(1)(2)(5)(8)(3)(2)(5)(8)(10)

我要回帖

更多关于 内存泄露 的文章

 

随机推荐