日期:2008-09-18  浏览次数:21292 次

技巧 8:迟一点获得资源,早一点释放资源

  这里是一个小技巧供您参考。一般来说,最好迟一点获得资源,早一点释放资源。这适用于 COM 对象以及文件句柄和其它资源。

  这种优化方法主要用于 ADO 连接和记录集。当您使用完记录集,比方说在显示一个表及其数据之后,应立即释放它,而不是等到页面结束时再释放。将 VBScript 变量设置为 Nothing 是最好的做法。不要让记录集超出作用域之外。而且,要释放任何相关的 Command 或 Connection 对象(在将记录集或连接设置为 = Nothing 之前,不要忘记调用 Close())。这会缩短数据库必须为您准备资源的时间,并尽快释放数据库到连接池的连接。

技巧 9:进程外执行过程以性能换取可靠性

  ASP 和 MTS/COM+ 两者都有配置选项,可使您兼顾可靠性和性能。当建立和部署应用程序时,应知道如何兼顾两者的性能。

  ASP 选项
  可以配置 ASP 应用程序,以便以三种方法之一运行。在 IIS 5.0 中,引入了“隔离级”这一术语以说明这些选项。这三个隔离级分别是低级、中级和高级:

  低级隔离。这在 IIS 的所有版本中都得到支持,且是最快的。它在 Inetinfo.exe 中运行 ASP,Inetinfo.exe 是主要 IIS 进程。如果 ASP 应用程序崩溃,IIS 也会崩溃。(要在 IIS 4.0 下重新启动 IIS,Web 站点管理员应使用诸如 InetMon 之类的工具监视站点,如果服务器发生故障,应启用批处理文件以重新启动服务器。IIS 5.0 引入了可靠的重新启动,该方法可使发生故障的服务器自动重新启动。)
  中级隔离。IIS 5.0 引入了这个新的级别,它被称为进程外级别,因为 ASP 在 IIS 进程之外运行。在中级隔离中,被配置作为中级隔离运行的所有 ASP 应用程序都共享一个进程空间。这就减少了在一台服务器运行多个进程外 ASP 应用程序所需要的进程数量。中级隔离是 IIS 5.0 中的默认隔离级别。
  高级隔离。在 IIS 4.0 和 IIS 5.0 中支持这一级别,高级隔离也是进程外的。如果 ASP 崩溃,Web 服务器并不会崩溃。下次 ASP 请求时,ASP 应用程序就会自动重新启动。在高级隔离中,配置作为高级隔离运行的每个 ASP 应用程序都在其自有进程空间中运行。这样做可保护 ASP 应用程序彼此之间不相互干扰。其缺点是它要求每个 ASP 应用程序都要有一个单独的进程。当在一台服务器上必须运行许多应用程序时,系统开销就会大大增加。
  哪个选项最好的呢?在 IIS 4.0 中,进程外运行将显著降低性能。在 IIS 5.0 中,做了许多改进,将进程外运行 ASP 应用程序所产生的开销降到最低限度。事实上,在绝大多数测试中,IIS 5.0 中的 ASP 进程外应用程序比 IIS 4.0 中的进程内应用程序运行得更快。不管怎样,在两个平台上,进程内(低隔离级)性能最佳。但是,如果访问率相对较低或最大吞吐量较低,低隔离级的优势不太明显。因此,在您每一 Web 服务器每秒钟需要数百或成千上万页面时,才会觉得有必要设置低隔离级。与往常一样,应对多种配置进行测试,确定您要采取哪一种折衷方案。

  注意 当您运行 ASP 进程外应用程序时(中级或高级隔离),它们在 NT4 中的 MTS 和在 Windows 2000 中的 COM+ 中运行。即,在 NT4 中它们在 Mtx.exe 中运行;而在 Windows 2000 中,它们在 DllHost.exe 中运行。您可以在任务管理器中看到这些进程在运行。您还可以看到 IIS 如何为进程外 ASP 应用程序配置 MTS 程序包或 COM+ 应用程序。

  COM 选项
  COM 组件也有三种配置选项,虽然与 ASP 选项不完全类似。COM 组件可以是“未配置的”、配置为库应用程序或配置为服务器应用程序。“未配置的”意思是指组件没有注册 COM+。组件将在调用程序的进程空间运行,那就是说,它们是“进程内的”。库应用程序也是进程内的,但使用 COM+ 的服务,包括安全、事务和上下文支持。服务器应用程序被配置为在它们自有的进程空间内运行。

  您可以看到未配置的组件比库应用程序略有一些优势。库应用程序比服务器应用程序的性能优点更大。这是因为库应用程序与 ASP 在同一进程内运行,而服务器应用程序在它们的自有进程内运行。进程间的调用比进程内调用开销更大。而且,当在进程之间传递诸如记录集之类的数据时,必须在两个进程之间复制所有的数据。

  陷阱!当使用 COM 服务器应用程序时,如果您在 ASP 和 COM 之间传递对象,要确保对象执行“按值汇集”或 MBV。执行 MBV 的对象将它们自己从一个进程复制到另一个进程。这比下面一种方法好,采用这种方法时,对象仍在创建者的进程中,另外一个进程反复地调用创建进程以使用该对象。切断连接的 ADO 记录集将“按值汇集”,连接的记录集则不然。Scripting.Dictionary 不执行 MBV,且不在进程之间传递。最后,VB 程序员请注意:MBV 不通过传递参数 ByVal 获得。MBV 由原始的组件作者执行。

  怎么办?
  如果让我们建议一个兼顾性能与可靠性的合理配置,它们应是如下的配置:

  在 IIS 4.0 中,使用 ASP 低隔离级别,使用 MTS 服务器程序包。
  在 IIS 5.0 上,使用 ASP 的中隔离级,并使用 COM+ 库应用程序。
这些是非常一般的原则,主机服务公司一般情况下以中或高隔离级运行 ASP,而单用途的 Web 服务器可以以低隔离级运行。衡量各种利弊,并自己决定哪个配置更能符合您的需要。