asp系列(九)设置对象范围
U3000
使用页面范围对象
在ASP页面server.createobject创建的对象存在于页面的寿命。对象是页面上的脚本命令的访问,并释放对象时,ASP完成页。因此,该对象具有页面或生命周期的范围。
用Visual Basic或VBscript编程时,不小心在ASP完成的网页发布的对象。例如,下面的语句通常用于通过一个什么值分配一个对象变量释放对象:
集myobj时=没有
如果你有这句话在ASP页面,任何试图使用myobj时将返回一个预期的错误代码。但在内部,即使在释放对象,ASP仍持有对它的引用。当你不能在脚本中使用一个对象,该对象的资源不到ASP了发布页面。同样的,如果你释放该对象创建另一个对象的实例并将其分配给对象变量,ASP将原始对象实例的引用保留。对于大多数的脚本,创建多个对象可能不会造成问题,但如果对象使用的共享资源,如连接可能有问题。
因为对象有一个页面范围,所以不依赖于手动释放的对象。例如,下面的循环创建了1001个连接对象,这些对象可以打开大部分连接,甚至可以打开大型SQL服务器:
对于我= 0比1000
设置conn = server.createobject(数据连接)
康涅狄格州打开连接字符串
下一个
%>
一般来说,应该尽量避免在循环中创建对象。如果不能避免,应该手动释放对象所使用的资源。如果连接对象只创建一次,并且每个周期中的物理数据资源连接是打开和关闭的,那么这将是正常操作:
设置conn = server.createobject(数据连接)
对于我= 0比1000
康涅狄格州打开连接字符串
康涅狄格州接近
下一个
%>
将会话范围分配给对象
在应用中,每一个新的会话,会话范围对象的创建和释放会话结束后。因此,每个活动会话的会话范围内有一个对象,用于从多个脚本调用的对象,但只有一个用户会话的影响。你可以给对象的会话范围的只有你需要它。如果你需要使用会话作用域,您必须了解线程模型提供的对象,因为它影响和对象的安全环境的性能。有关详细信息,请参阅本主题的先进性能问题的信息。
给会话作用域的对象,在ASP会议上,存储对象建立对象,你可以在Global.asa文件中使用的标记,或者你可以使用server.createobject方法创建会话作用域的对象实例的ASP页面。
在Global.asa文件,你可以将runat属性(设置为服务器)和范围属性(必须设置为会话);对象>标记。下面的示例创建一个广告对象的会话范围实例:
一旦将对象存储在会话对象中,就可以从应用程序的任何页面访问对象:
在ASP页面中,您还可以使用server.createobject方法在建立的会话对象中存储的对象。下面的示例存储在会话对象中的广告对象的一个实例。
要显示广告,您应该首先获取存储在会话对象中的AD旋转对象的实例,然后调用该方法来显示对象:
ASP不前,它是由一个脚本命令引用的ASP文件创建一个标注对象的一个实例,server.createobject方法直接创建对象实例,因此,标记的使用比server.createobject属性为会话范围对象。
将应用程序范围分配给对象
应用范围对象的单个实例的对象时创建的应用程序已启动。这个对象由所有客户端请求共享。只在少数情况下,你需要给应用程序范围的对象。一些实用的物品,如柜台,可能需要的应用范围。但一般来说,你可以使用的替代方案,你的建议在下一节。此外,线程模型的影响和对象安全环境的性能(参阅本主题:先进的信息的性能问题)。
指定应用范围对象和存储在ASP内置对象,你可以在Global.asa文件中使用的标记,或者你可以使用ASP页server.createobject方法创建对象实例的应用范围。
在Global.asa文件,你可以将runat属性(设置为服务器)和范围属性(必须设置为会话);对象>标记。在ASP页面中,您可以使用server.createobject存储对象实例应用程序内建对象,使用标记和server.createobject例子,看给会话范围为对象的一部分。
会话和应用范围的替代方案
会话或应用范围可以给对象只有当它是必要的。这些对象保存到会话或应用程序结束。它们占用的资源如内存或连接,这些资源可能在其他方面更加有用。另外,线程模型影响的对象你创造出来的的性能,尤其是那些具有会话或应用范围。
在许多情况下,一个更好的方法来创建对象比创建应用程序或会话作用域的对象是传递信息创建在Web层面运用会话或应用程序作用域变量的对象。例如,不指定会话或应用程序使用ADO连接对象,因为他们创造的连接将在相当长的一段时间保持开放,当脚本通过ODBC连接不再共享。但你可以存储在会话或应用程序的内置对象ODBC连接字符串,并从网页上创建对象实例的连接字符串,你可以存储在会话或应用程序命名空间经常使用的信息,但只有在需要的时候,你创建对象,使用这信息。
用户定义的Jscript对象
你可以通过定义一个构造函数,创建并初始化新对象的属性和方法,创建自己的Jscript对象。当脚本调用的构造函数使用new运算符,创建该对象的实例。ASP脚本支持用户定义的对象,它的正常运行时,页面有一个页面范围内。但是如果一个应用程序或会话范围给出定义的Jscript对象的用户,它可能会影响物体的功能。特别是,如果一个对象有一个会话或应用范围,其他页面的脚本可以得到对象的属性,但它不能调用它的方法。
高级信息:性能问题
线程模型可能会影响Web站点的性能。通常,带有两个标记的对象都是所有ASP脚本中推荐的对象,尤其是在会话和应用程序对象中。
因为您可能并不总是控制所使用对象的线程模型,下面的指南可以帮助您获得最佳性能:
页面范围对象。具有两个或两个单元标记的对象将给您最佳性能。
应用程序范围的对象。一般来说,你应该避免配售对象在应用程序对象。如果你真的需要使用应用程序范围的对象,你从一个标签相结合的freethreadedmarshaler对象获得最佳的性能。你可以使用一个标记或server.createobject方法来存储一个对象与一个单一的,自由的,或标签在应用对象,你必须使用单元线程对象使用的标签。
会话对象。与标记物将为您提供最好的性能。单线程单元线程对象使得Web会话线程锁上。自由线程对象不锁的会话,但不运行在一个较高的速度。在会话对象,您可以存储对象的任何一个标记或server.createobject方法。
如果您安装了SDK文档,您将获得关于线程模型及其隐含性能的详细信息(SDK文档在Windows 95和后续版本中不可用)。