您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:11 来源:vckbase.com

本文章共6158字,分4页,当前第1页,快速翻页:
 

WEB Q&A...

JScript 内存泄露、获取 XmlDataDocument 以及 ASPX 包含页面


原著:Nancy Michell

翻译:宋文锋
逆风者

原文出处:MSDN Magazine Apr. 2004(Web Q&A)
 

我创建了一个 Web 应用程序,它的界面功能十分丰富。这个程序主要是由 XML、XSLT 和 JScript 构建的。我遇到了一个大问题就是它消耗了大量的内存,但我不知道为何会出现这种情况。我使用 闭合函数(closures:一种在函数中定义函数的方法)来实现事件处理,我怀疑就是使用它才导致的内存泄露。

用闭合函数作为事件处理的实现,是导致内存泄露的普遍原因。闭合函数总是允许内部函数访问外部函数的参数和变量。
  Eric Lippert 的 Blog (译者:Web Log 的简称)上有一篇关于闭合函数和内存泄露的文章:What are closures?。然而请注意,在这篇文章截稿前仍旧有一个错误没有改正。当微软IE浏览器导航到某一页时 ,循环引用会使效率下降的说法并不正确。几年前当这个问题第一次出现时,并没有造成很大影响,但是IE团队发现它影响很多现存的页面,所以还是关闭了此项功能 。
  创建一个界面功能丰富的 Web 应用程序,就像你前面所叙述的。首先这不是一个好想法,它会导致软件过于臃肿以至于泄漏内存。这方面内容请参见:Thin To My Chagrin
  根据函数是否被动态地创建来谨慎地使用闭合函数语义。如果函数是被动态地创建,例如通过 new 操作符来声明,那么你应该寻找一种方法来避免这么做。使用New表达式生成的函数相当于使用Eval表达式,而Eval表达式会影响性能。它会执行编译过程。如果这个函数需要被动态地创建,并且可以不需要使用闭合函数语 义,那么将发生器放到一个辅助函数中,该辅助函数没有那些会形成循环引用的参数。这样,所产生的函数将会在一些不需要回指向IE对象模型的事件前结束。如果这个函数是静态创建的,不需要使用闭合函数语 义,就不要将它嵌入到其它函数中。并且重构你的应用程序直到你脱离这种困境。

我怎样才能确定 XmlDataDocument与 DataSet 是关联的?如果我采用下面的代码来从 DataSet 中创建一个XmlDataDocument: 便很容易获得与这个 XmlDataDocument 相一致的 DataSet,如下所示:

DataSet dataset = xmlData.DataSet;

  然而,一旦XmlDataDocument与DataSet的关联关系建立起来,我怎样才能确定这个XmlDataDocument确实来自于DataSet呢?这很重要,因为如果我试图为DataSet创建第二个XmlDataDocument时,会抛出一个异常。 我依赖于DataSet。在许多方法中, 我以XML的格式来操作数据. 当DataSet在方法间被传递时,XmlDataDocumnet是否被创建了,它的引用是什么,我需要知道调用这些方法时其内部操作的相关知识。

没有简单的方法。很不幸,DataSet不提供任何公有的API来检查一个 XmlDataDocument 是否与之相关或者提供它的一个引用。 然而,作为一个折中的办法,你可以选择以下两条之一来解决:
  1. 总是在一个Try-Catch块中实例化 XmlDataDocument,并且捕获异常变量,如果DataSet已经与一个 XmlDataDocument 相关联,那么就会抛出异常。
  2. 利用程序跟踪判断 DataSet 实例是否已经与一个 XmlDataDocument 相关联。

  之后你可以使用 DataSet.ExtendedProperty 创建一个用户自定义属性来保持对一个不知道是否被关联的 XmlDataDocument 的跟踪。
 

本文章更多内容1 - 2 - 3 - 4 - 下一页>>
相关文章

Windows中回收站(Recycle Bin)的存取方法
一个可重用的RAS 类
C语言之四书五经
MySQL数据库接口的VC实现与应用
WinSock学习笔记(二)
FMail文件信使 V2.0
在你的MFC应用程序中显示一个JPG文件
多层图像合成修正版
如何获取某个动态链接库的版本信息
Island Hopper News 范例及其它
树型控件实现数据库的访问
如何实现24位色工具条
WinSock学习笔记(一)
加密 Windows CE系统
系统分析员考试回顾
浅谈PDFlib中文输出(五)人工生成粗体及斜
在WinCE5中编程查找并连接周围的蓝牙设备并
语法高亮控件 PfxEditCtrl
Windows SDK笔记(五):非模式对话框
N皇后问题摆法算法描述

相关评论


本文章所属分类:首页 VC++

  热门关键字: