详细介绍了 Windows NT 4.0、Windows 2000 和 Windows Server 2003 的相对性能和可伸缩性综合基准测试的结果......
对结果的讨论
基准测试表明,Windows Server 2003 在所有测试方案中都具有显著的性能/可伸缩性优势。测试还表明,从 Visual Studio 6.0/Windows 系列转移到 Visual Studio .NET 平台时可以获得最显著的效果。基于 Visual Basic 6/ASP 的应用程序的最佳性能只能达到 .NET 实现方案的峰值 TPS 的 28%。由于这是一种基于端到端解决方案的基准测试,因此对客户很有用,因为它显示了一个完整应用程序的性能,而大多数客户的应用程序都使用与此应用程序相同的基本平台构建块。另一方面,由于基准测试的对象是一个端到端的应用程序,因此很难确切地说明导致性能改善的因素有哪些。但是,以下因素可能是造成性能差异的原因:
- Windows Server 2003 的 Internet 信息服务 (IIS) 6.0 提供了新的进程模型,比 Windows 2000 中的 IIS 5.0 和 Windows NT 4 中的 IIS 4.0 更具性能优势。由于所有应用程序在各种情况下均在独立的进程空间中运行(与 inetinfo IIS 进程隔离),因此这一点可能是导致性能提高的主要因素。
- Windows Server 2003 对 SMP 提供了更好的支持,使得多处理器计算机可以获得更好的可伸缩性。Windows Server 2003 内核具有很多增强功能,使其在 SMP 计算机上的伸缩效率更高。
- 使用 ASP.NET 的 .NET 公共语言运行时提供了更快的 Web 应用程序运行时环境,比使用 Visual Basic 6 COM+ 组件的 Active Server Pages 快很多。一般来说,ASP.NET 的性能要比 ASP 好得多。其原因包括 ASPX 页面的代码在 CLR 中运行之前已进行完全的预编译,而 ASP 页面则是对原始代码进行解释的。尽管从 ASP 页面激活的 Visual Basic 6 组件也已编译,但 .NET CLR 提供的运行时执行环境比 Visual Basic 6 运行时更快、更有效。使用 ADO.NET 获得的性能要优于使用 ADO 获得的性能,这一点可能也是导致 Visual Basic 6 和 Visual Basic .NET 性能差异的主要因素。ADO.NET 利用新的托管代码 SQL Server 本机驱动程序(System.Data.SqlClient 类),而 ADO 则使用较慢的 SQL Server OLE DB 驱动程序。
- ASP.NET 的动态输出缓存功能。ASP.NET 支持动态页面输出缓存,作为其内置的缓存 API 的一部分。这样,Web 应用程序就很容易在中间层缓存页面和数据,以便与后端数据变换的频率相匹配。以 Nile 为例,其中的某些页面(例如产品搜索和目录列表)可以利用这种新的缓存机制,因为基准测试的运行规则规定,产品数据库每 12 小时才更新一次。ASP.NET 可以根据用户的输入来缓存页面,而不必在每次请求时都处理频繁的搜索等操作。.NET 在设置缓存规则和有效期方面提供了丰富的功能,可以根据开发者设定的缓存优先级和 LRU 策略自动权衡可用的内存和缓存大小,以便在缓存中保存常用的请求项目。而 ASP 和 Visual Basic 6 未提供用于中间层数据的缓存机制,所以在构建基于 ASP 的 Visual Basic 6 应用程序时没有相同的功能。
- Windows Server 2003 提供了更好的联网/IO 支持。TPS 高端 Visual Basic .NET 应用程序要求使用较重的用户负载以使系统饱和,当服务器发送 HTML 页面时,它要处理相当多的底层客户端吞吐量。Windows Server 2003 的联网/IO 堆栈做了重大改进,比 Windows 2000 更有效。从 Windows 2000 中的 .NET 转移到 Windows Server 2003 中的 .NET 时,这一因素可能也促进了性能的提高。
对基准测试应用程序的讨论:Visual Basic 6 与 Visual Basic .NET
Nile 基准测试的两种实现方法提供了同样的功能,并依赖于同一个底层 SQL Server 存储过程。但是,由于 Visual Basic 6/ASP 和 Visual Basic .NET/.NET Framework 的主要体系结构/API 之间存在较大差异,因此应用程序的中间层完全不同。下表列出了它们之间的共同点和不同点。
表 2:Visual Basic 6.0 实现方案与 Visual Basic .NET 实现方案的比较
范围 |
Visual Basic .NET |
Visual Basic 6/ASP |
UI - 显示 |
HTML 4.0 |
HTML 4.0 |
UI - 处理 |
ASP.NET (Visual Basic .NET) 和内含代码的 Web 窗体 |
HTML 中的 ASP 和内联 ASP 脚本 |
中间层 |
Visual Basic .NET 程序集和作为可编程组件提供的对象 |
Visual Basic 6 COM+ 组件和作为可编程组件提供的对象 |
数据层 |
SQL Server 存储过程 |
SQL Server 存储过程(与 Visual Basic .NET 的存储过程相同) |
会话状态 |
ASP.NET 会话对象(群集安全) |
数据库(只有 ASP 存在群集安全机制) |
数据访问/驱动程序 |
ADO.NET 通过本机 .NET SQL Server 提供程序 |
ADO 通过 OLE DB SQL Server 提供程序 |
HTTP 服务器 |
IIS 6.0/IIS 5.0 |
IIS 6.0/IIS 5.0 |
数据库服务器/操作系统 |
SQL Server 2000/Windows 2000 |
SQL Server 2000/Windows 2000 |
Visual Basic .NET 实现方案和 Visual Basic 6/ASP 实现方案的体系结构比较
性能数据本身说明了明显的差异,但这些数据并未说明使用 ASP 在 Visual Basic 6 中构建 Nile 应用程序和使用 Visual Basic .NET 构建 Nile 应用程序的区别。就所用的工具或技术来说,两种实现方案都可以认为是“最佳方法”,但它们在实现上有着本质的区别,因为 Visual Basic 6 和 ASP 并不具备某些 .NET 核心功能。以下是主要的不同之处:
- 面向对象。Visual Basic 6 是基于对象的,但与 Visual Basic .NET 不同,它不是真正的面向对象。尽管围绕面向对象编程这一话题还有很多不实之辞,但 Nile 实现方案确实证明,正确地使用面向对象可以简化使用 Visual Basic .NET 编写代码的过程。例如,在 Visual Basic 6 中,Nile 应用程序使用 COM 对象从数据库中检索数据,然后 ASP 页面通过 Active Server Page 将数据逐字“分”到 HTML 中。而 Visual Basic .NET 不仅使用明确定义的对象(封装在 .NET 程序集中)从数据库中获取数据,还使用对象清晰地表示检索到的数据。例如,用 ProductInfo 类来表示数据库中的一行数据(对象关系映射)。ASP.NET 不需要在 HTML 页面中嵌入任何内置脚本,就可以简单地将表示搜索结果(或购物车中的东西)的对象数组绑定到 ASPX 页面的 databound 服务器控件。这样编写出来的代码简洁易懂。使用丰富的 .NET Windows 窗体还可以方便地重复使用中间层,而且对象中的 ADO.NET 记录集抽象意味着当数据库改变时(例如从 SQL Server 2000 转换为 Oracle),不需要改变 UI 层。
- Web 窗体及内含代码。在 ASP.NET 中,UI 处理代码独立于 HTML 页面,位于单独的内含代码文件中,而 ASP 要求内联代码直接与 HTML 页面混合。另外,Web 窗体的事件驱动模型使得 .NET 代码的编写和理解更加容易。例如,当用户单击按钮时,ASP.NET 页面中的服务器端事件处理程序将自动进行处理。在 ASP 中,开发人员必须编写代码来处理提交表单或检索查询字符串变量,这样才能理解用户所请求的操作。
- 在群集中使用 Session 对象的功能。由于购物车必须是群集安全的,因此在 ASP 中无法使用 Session 对象来实现购物车。在 ASP 中,Session 对象始终处于 Web Server 进程内,多个 Web 服务器无法将用户映射回各自的购物车(尽管可以使用客户相似性,但无法实现故障转移,因为服务器是从群集中移去或添加上去的,可能会丢失一些用户的会话状态)。但在 ASP.NET 中则不再有此限制。Session 对象可以很容易地从进程内映射到中央专用状态服务器或中央 RDBMS 数据库。因此,ASP.NET 版本使用 Session 对象来存储各用户的购物车对象。购物车类被标记为可序列化,以便可以通过网络传递或写入到数据库。ASP 版本必须在自定义的数据库处理例程中实现购物车,这样才能实现群集安全。
- 使用一种集成工具来构建应用程序。Visual Studio.NET 为应用程序的各个方面提供了一个集成开发环境,包括带 HTML 的 Web 窗体、中间层程序集,甚至是数据库存储过程。而 Visual Studio 6.0 要求在用于 HTML/ASP 逻辑的 Visual InterDev 6.0 IDE 和用于中间层 COM 组件的 Visual Basic 6.0 IDE 之间进行转换。
与 Visual Basic 6/ASP 实现方案相比,这些只是 Visual Basic .NET 实现方案的关键体系结构优势。您可以下载代码并安装这两种应用程序,仔细比较它们之间的相同和不同之处。
查看本文来源