提高 DataSet 序列化和远程处理性能

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

概要

本文讨论针对较大的 .NET Framework System.Data.DataSet 类的性能优化,并且提供了一个经过优化以便更加有效地序列化和反序列化较大的 DataSet 类的示例序列化包装类。

更多信息

在进程之间传递 System.Data.DataSet 对象时,将使用 .NET Framework Remoting 序列化、传输以及反序列化 DataSet 类。如果从 .NET Web 服务传回 DataSet 类,会在内部使用 Microsoft .NET Framework System.Xml.Serialization.XMLSerializer 类将 DataSet 数据序列化回客户端。如果从 COM+ 中承载的托管对象传回 DataSet,则 .NET Framework Remoting 使用 BinaryFormatter 类。无论 .NET Framework 使用何种远程处理机制,DataSet 类在序列化数据时始终将内部数据转换为 XML。

通过 .NET Framework Remoting 序列化 DataSet 中的少量数据(数百行)时,Microsoft .NET Framework 1.0 与 .NET Framework 1.1 中包含的 DataSet 类可以高效地工作。在处理较大的 DataSet(数千行)时,此序列化机制的效率不够高,并会导致较大的暂时(短期)内存分配。这些内存分配会降低应用程序的可伸缩性。

注意:暂时内存分配是在处理某些代码段过程中发生的短期内存分配。因此,在 DataSet 类的序列化、远程处理及反序列化期间,.NET Framework Remoting 会在内部分配和释放各种不同的托管对象,从而处理远程处理请求。分配和释放较大的托管对象会给 .NET 内存管理系统造成额外的压力,还会降低整体可伸缩性。例如,有多个未决方法调用(这些调用会产生较大的暂时内存分配)的应用程序可以在完成所有方法调用之前用尽内存。

通过使用正确设计的代理类型或序列化包装类,可以显著提高较大的 DataSet 的序列化和远程处理性能。有关将代理机制或包装机制(或两者同时)用于 .NET Framework DataSet 类的更多信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
http://msdn.microsoft.com/msdnmag/issues/02/12/cuttingedge
不过,本文并未提供有关如何实现 DataSet 代理类型或序列化包装类的完整示例。

本文包含一个示例序列化包装类,该包装类经过优化以便更加高效地序列化和反序列化较大的 DataSet。相对于远程处理典型的 DataSet,该类显著减少了暂时内存分配。暂时内存分配的大幅度减少还缩短了使用较大 DataSet 时远程处理端到端时间,同时增强了可伸缩性。

该示例提供了一个名为 DataSetSurrogate 的序列化包装类。DataSetSurrogate 类用作您要进行远程处理的任何 DataSet 的包装类。服务器组件将所需的 DataSet 传递到 DataSetSurrogate 构造函数,然后将 DataSetSurrogate 类传回客户端。在客户端,将使用 DataSetSurrogate.ConvertToDataSet 方法从 DataSetSurrogate 类中提取 DataSet

DataSetSurrogate 类标记为可序列化,并且 DataSetSurrogate 类中的所有字段同样也是可序列化类。因此,在远程处理 DataSetSurrogate 对象时,远程处理基础结构将自动序列化和反序列化 DataSetSurrogate 对象及其所有字段。与 DataSet 类相比,DataSetSurrogate 类的主要序列化优势在于,DataSetSurrogate 类以二进制格式序列化数据。无论在内存还是 CPU 方面,用二进制格式进行序列化的效率都比现有 DataSet XML 序列化格式高出许多。

注意:要使此序列化包装类的性能优势最大化,进行远程处理时请使用 .NET Framework System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 类。使用 .NET Framework System.Runtime.Serialization.Formatters.Soap.SoapFormatter 类进行远程处理不如使用 DataSetSurrogate 类效率高。

可以从 Microsoft 下载中心下载以下文件:
收起这个图片展开这个图片
下载
立即下载 SurrogateSample.exe 程序包。 有关如何下载 Microsoft 支持文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591 如何从联机服务获取 Microsoft 支持文件
Microsoft 已对此文件进行了病毒扫描。Microsoft 使用的是该文件发布时可以获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器上,有助于防止在未经授权的情况下对其进行更改。

访问示例文件

将 SurrogateSample.exe 文件保存到计算机的驱动器 C 中。可以从该位置提取文件夹结构。在每个文件夹中都有一个自述文件,其中包含有更多说明。

属性

文章编号: 829740 - 最后修改: 2006年12月8日 - 修订: 1.5
这篇文章中的信息适用于:
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
关键字:?
kbdownload kbinfo KB829740
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