XSLT 转换,.net 框架中的信息: 性能

文章翻译 文章翻译
文章编号: 325689 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文包含有关的原因和解决方案或变通办法使用.net Framework XSLT 处理器执行 XSLT 时可能遇到的已知的性能问题的信息的转换。

XSLT 转换,与 XmlDataDocument 执行缓慢

应用到在 ADO.NET 数据集 数据的 XML 表示形式的 XSLT 转换是一个常见的应用程序要求。Microsoft.net 框架基类 System.Xml 命名空间中的用于与 ADO.NET 数据集 一起在.net 应用程序中实现这一要求。

System.Xml.Xsl.XslTransform 是.net 框架基类,用于执行 XSLT 转换。System.Xml.XmlDataDocumentSystem.Xml.XmlDocumentSystem.Xml.XPath.XPathDocument 是三个.net 框架基类可以被用来加载和执行 XSLT 转换时提供与源 XML 中 ADO.NET 数据集 数据的 XML 表示的。这三个选项的使用 XmlDataDocument 对象需要最少的代码,因为它被实例化时可直接与 DataSet 对象同步它。但是,较慢的性能是一个常见的问题,XmlDataDocument 对象使用 ADO.NET 数据集 的 XML 表示形式对应用 XSLT 转换时。此行为是设计在 RTM 版本中的在.net 框架。

System.Xml.XPath.XPathDocument 是最优化为 XPath 和 XSLT 处理类。加载 数据集 数据 XPathDocument 对象中的 XML 表示形式和 XPathDocument 对象提供作为源 XML 中,执行 XSLT 转换以获得最大的性能时。 有关此问题的其他信息和一个代码示例演示如何实现所述的解决方法,为,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
318580PRB: XmlDataDocument 与 XSL 转换可能执行其他缓慢 XPathDocument 于

低性能时转换数据集与非嵌套 DataRelation 对象

降低性能是 dataset 的一个常见的问题,当您尝试转换 XML 表示形式 数据集 具有多个相关 数据表 对象和 $ 其 DataRelation 对象包含不被嵌套以反映来描述序列化 XML 中的关系的层次结构。

当您尝试这样 XML 数据转换为另一种分层格式 (如 HTML 表的显示将在父-子层次结构中的数据),您必须使用 XPath 位置路径轴,如 以下同辈 和可能会降低转换的 前同辈 处理时有中型到大型数据量。

在这种情况下 Microsoft 建议您嵌套 DataRelation 对象的 数据集 (即,设置 DataRelation嵌套 属性为 True),并在 XSLT 样式表用来定位和转换数据的自然自上而下的层次结构的 XPath 查询表达式中编写代码。有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
325693PRB: 性能缓慢时转换与非嵌套 DataRelations ADO.NET DataSet

100 %cpu 利用率或挂起时,使用如下到执行 XSLT 转换,使用前面的兄弟

使用 如下 对象提供的源 XML 以使用的 前同辈 XPath 位置轴 XSLT 转换将导致 100 %cpu 使用率,这会导致计算机停止响应 (挂起),并还使系统性能中的陡的拖放。

转换较大的 XML 文档或流媒体时,此行为是很明显。这是当前在.net 框架的 RTM 版本中的已知的问题。Microsoft 致力于防止 100 %cpu 的利用率在下一个主要版本的.net 框架。增强 如下 时要匹配的 XPathDocument 性能执行 XPath 查询和 XSLT 转换并不是在.net Framework 的未来版本的一个设计目标。

XPathDocument 类是在.net 中加载应用程序必须在 XML 数据上执行 XPath 查询或 XSLT 转换 XML 建议的接口。 如果您在遇到此问题修改您的代码以提供 XSLT 转换过程将源 XML 中使用 XPathDocument 对象。

较慢的性能时使用 xsl:key

xsl:key XSLT 元素经常用于在 XML 数据分组或标识的指定的元素或源 XML 中的属性值的唯一匹配项。 它们用于转换在.net 应用程序中的 XML 数据时,使用 xsl:key 元素的 XSLT 样式表会表现出性能降低。这由于问题引起的一个已知在 XSLT 处理器实现 xsl:key 元素在.net 框架的 RTM 版本中。

若要解决此问题的修复程序是当前可用的。 有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
324478低与托管 Parser XSLT 性能

生成的内联脚本块的托管程序集未正确释放

托管程序集是.net 框架中生成和隐式加载内联 <msxsl:script> 中执行包含的代码 块。在.net 框架的 RTM 版本中的已知的问题会阻止从转换过程完成后所正确卸载这些程序集。此异常可能会导致如果受影响的样式表反复加载到执行 XSLT 转换,从而导致系统性能中的拖放的内存使用情况增量增加。仅当宿主进程被回收时,会释放未发布的内存。 有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
316775PRB: 无法卸载程序集,您创建并加载在 XSLT 使用脚本
要变通解决此异常在 ASP.NET 应用程序,负载受影响的样式表在的应用程序的生命期间只一次缓存 ASP.NET 高速缓存中的该样式表和重复使用更高版本转换为缓存的版本。在 Windows 窗体和控制台应用程序项目您可以使用全局 XslTransform 对象实例加载应用程序启动时,受影响的样式表和执行更高版本的转换。必须是无状态的环境中执行 XSLT 转换时,这些解决方法方法不适用 (例如对于中间层企业服务组件)。

Microsoft 建议您在实现自定义 XPath 扩展函数并避免此异常的副作用使用 XSLT 扩展对象。

参考

有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
313997信息: 指南在.net 应用程序中执行 XSLT 转换

属性

文章编号: 325689 - 最后修改: 2004年1月23日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft .NET Framework Class Libraries 1.1
关键字:?
kbmt kbinfo kbxml KB325689 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 325689
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com