• Application对象、Session对象、Cookie技术 之 Application对象


    一、Application对象可以实现应用程序的状态管理
     (1)Application的应用:

          ◆可以统计目前上站的人数

          ◆可以用于网站上不同用户之间的通信

          ◆可以记录广告条被点击的次数

          ◆可以在每个主页上显示动态信息

          ◆可以从数据库提取数据供多个网页使用

    (2)创建Application变量的语法

          Application(“变量名称”)如:Application("Welcome")="欢迎光临我的主页!"

    (3)Application变量不会自己消亡,在使用中应注意:
    Application变量会始终占据内存,创建过多的变量会降低响应速度
    Application变量在三种情况下被中止:服务被中止、Global.asa被改变或者该Application被卸载

    (4)使用Application对象的语法
    Application. 属性│方法

    (5)Application对象的方法

    Application的方法都是用于处理多个用户对存储在Application中的数据进行写入的问题。共有两个:Lock方法:防止其他客户端更改Application对象的值。(仅当前客户可修改和存取);Unlock方法:与Lock方法相反,允许其他客户端更改Application对象的值。
       具体用法:

          Application.Lock-锁定Application对象所有变量

          Application.Unlock-解锁Application对象所有变量
    如;
           Application.Lock;

           Application("NumCount")=Application("NumCount")+1;NumCount是在Application_OnStart事件设置的变量

           Application.Unlock;

     (6)Application对象的事件
          Application有两个事件:

          Application_OnEnd       Application_OnStart

          Application_OnStart:当每个Application对象开始时会激活该事件

          Application_OnEnd:当每个Application对象结束时会激活该事件
    上述两个事件必须放在Global.asax文件
    (7)Application对象的集合
    Application的集合有两个:
    1Contents数据集合

          Contents允许程序取得用户能使用的所有的Application对象

          注:不包括用<OBJECT>标记与CreateObject方法建立的对象

          语法结构:

          Application.Contents(Application 对象名称)
    2、StaticObjects数据集合可以取得以<OBJECT>标记建立的Application对象

          Application.StaticObjects(对象变量名称)

     

          利用<OBJECT>标记创建对象的语法:

      <OBJECT RunAt=Server SCOPE=对象 ID=实例对象名>

    Application对象重要的方法调用:

    ·Add方法,加入一个对象到Application对象的Stat集合中
    例如:
    Application.Add(“string1”,”test”)
    表示向Application的stat集合中加入一个名为string1的值为”test”的字符串,其实它的效果和
    Application(“string1”)=”test”
    以及Application.item(“string1”)=”test” 是一样的。

    ·Remove方法,根据给出的标识从Application对象的Stat集合中删去
    例如:
    Application.Remove(“string1”)
    表示把标识为string1的共享对象string1从Application对象的Stat集合中删去。使用它可以清除用Add方法添加的对象。

    ·RemoveAll方法,把Application对象Stat集合中的所有对象清除,在我们对属性的使用举例中,我们已经见过了它的用法,但是值得小心,我们不提倡使用它,因为在编程中你并不清楚,是否有其他页面要依赖于某个Application的公用变量,一旦清除将造成不可预知的错误。

    ·Clear方法,作用和RemoveAll方法一样。

    ·Get方法,允许使用名字标识或者是下标,来取得Application对象stat集合中的对象元素。
    例如:
    dim tmp as object
    tmp=Application.Get(“string1”)
    或者 tmp=Application.Get(0)
    表示从Application对象的Stat集合中取得标识为string1或者下标为0的对象
    它等价于:
    tmp=Application(“string1”)
    tmp=Application(0)
    或者是
    tmp=Application.item(“string1”)
    tmp=Application.item(0)

    ·Set方法,修改Application对象stat 集合中指定标识所对应的对象的值。
    例如:
    Application.Set(“string1”,”try”)
    就把我们开始为string1变量设置的值”test”改为”try”了,它和下边的形式也是一样的:
    Application(“string1”)=try

    ·GetKey方法,根据给定的下标取得Application对象的stat集合中相应对象的标识名。
    例如:
    dim nameStr as String
    nameStr=Application.GetKey(0)
    表示取得Application对象中Stat集合的第一个对象的标识名

    ·Lock方法,锁住其他线程对Application对象中stat集合的访问权限。这个方法主要是用来防止对Application的变量操作过程中,其他并发程序可能造成的影响。比如在记数过程中,如果不进行上锁操作,就有可能发生脏读脏写。例如,开始从变量中取得记数值1,
    如果在记数并写回到变量之间,另一页面对它发生了一次记数,并先行写回变量,那么最终写回到变量中的值为2,而并不是实际的3。如果采用了上锁机制,在页面读出变量到记数并写回变量的过程中,即使发生了另一次记数,由于变量被锁住,它也不可能在变量被写回以前取得成功,只有等待变量释放,从而形成两者对变量操作的串行性,避免了数据的脏读和脏写。

    ·Unlock方法,对Application对象Stat集合锁定的解锁操作,释放资源以供其他页面使用。

    下面我们就上边学到的方法做一个例子,为了强调lock方法和unlock方法,我们将单独举一个例子。例子是这样的,开始我们创建6个Application变量,赋以数值序号,页面有3个按钮,分别是加1,减1和清除。当点击“加1“按钮后,我们会看到变量的值都会增加1,当点击”减1“按钮后,变量值都减1,当按下清除后,变量都消失了。在清除功能中,我们为了同时演示remove和clear方法,采用最后三个用clear清除,其他的逐一用remove清除。

    1. 源程序

    <!-- 文件名:Application\FormApplication01.aspx -->

    <html>

    <script language="vb" runat=server>

    Sub Page_Load(o as object,e as eventargs)
    dim i as integer

    If Not IsPostBack
    for i=1 to 6
    application.add("item"&i,i)
    next
    End If

    response.clear
    for i=0 to application.count-1
    response.write(application.GetKey(i) & "=" & application.Get(i) & "<br>")
    next

    End Sub

    Sub AddOne(s as object,e as eventargs)
    '变量值加1
    dim i as integer
    dim j as integer
    dim t as string

    for i=0 to Application.count-1
    j=Application.Get(i)+1
    t=Application.GetKey(i)
    Application.Set(t,j)
    next

    Page_Load(s,e)
    '刷新画面
    End Sub

    Sub SubOne(s as object,e as eventargs)
    '变量减1
    dim i as integer
    dim j as integer
    dim t as string

    for i=0 to Application.count-1
    j=Application.Get(i)-1
    t=Application.GetKey(i)
    Application.Set(t,j)
    next

    Page_Load(s,e)
    '刷新画面
    End Sub

    Sub Gone(s as object,e as eventargs)
    '清空所有变量
    dim i as integer

    for i=0 to Application.count-3
    Application.Remove(i)
    next
    '演示remove方法
    Application.clear
    '演示clear方法
    Page_Load(s,e)
    '刷新画面
    End Sub
    </script>
    <head>
    <title>
    Application方法试验
    </title>
    </head>
    <body bgcolor=#ccccff>
    <center>
    <h2>Application方法试验</h2>
    <hr>
    <form runat=server>
    <asp:button type="submit" text="+1" OnClick="AddOne" runat=server />
    <asp:button type="submit" text="-1" OnClick="SubOne" runat=server />
    <asp:button type="submit" text="清空" OnClick="Gone" runat=server />
    </form>
    </center>
    </body>
    </html>

    2.开始时,输出画面:

    3.当两次点击+1后,输出的变量值:


    4.当点击”-1”后,变量的值为:


    5.当点击清空后,输出的画面

    接下来,我们看一个使用lock和unlock方法制作计数器的例子:Application对象对不同的连接者是共用的,因此适合制作计数器。

    程序代码如下:省略
    --------------------------
    asp.net改善application对象加快存储速度
    在传统的asp中,我们要用application对象去存储应用于整个application的变量。这当然会带来内存消耗的代价。在.net中,我们可以用static变量来改善它,采用static 变量在大多数时候存储的速度会比application对象快。
     
      做法: 

      创建一个webapplication,假设名称为webapplication1,在global.aspx中的global类中增加一个静态的成员sgreeting.

     
      public class global : system.web.httpapplication 
      { 
      public static string sgreeting = "china is great!"; 
      …… 
      }

      在webform1中增加一个label,名称为label1.
     
      在page_load()中为label1的text属性赋值。

      private void page_load(object sender, system.eventargs e)
      { 
      label1.text = webapplication1.global.sgreeting;
      }

      运行程序后将会看到china is great!

  • 相关阅读:
    js 获取表单和页面控件数据
    vue axios upload 多个文件
    vue antd axios 使用
    antd vue 修改modal弹窗样式
    线性回归的改进-岭回归
    线性回归
    00
    集成学习方法之随机森林
    决策树
    第十讲 让机器像人类一样学习--强化学习-----学习总结
  • 原文地址:https://www.cnblogs.com/huashanlin/p/546189.html
Copyright © 2020-2023  润新知