asp.net比asp的速度要快,这是共识,但是,下面的试验结果却出乎我们的意料:
asp代码:
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=gb2312 " />
< title > Untitled Document </ title >
</ head >
< body >
< %
Dim i
i = Timer * 1000
Dim j
Dim k
Dim l
k = 0
For j = 0 To 500
l = 0
For k = 0 To 5000
l = l + k
Next
Next
Response.Write(k)
Response.Write( " <br> " )
i = ( Timer * 1000 ) - i
Response.Write(i)
% >
</ body >
</ html >
这段代码运行结果为;
5001
1424
下面是asp.net的代码:
Inherits System.Web.UI.Page
Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim i As Integer
i = Timer * 1000
Dim j
Dim k
Dim l
k = 0
For j = 0 To 500
l = 0
For k = 0 To 5000
l = l + k
Next
Next
Response.Write(k)
Response.Write("<br>")
i = (Timer * 1000) - i
Response.Write(i)
End Sub
End Class
test.aspx文件只有一行:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="test" %>
这段程序和asp的程序几乎一模一样,执行结果如下:
5001
1922
也就是说,asp用了1.4秒,而asp.net却用了1.9秒,asp反而比asp.net速度快。这是怎么回事呢?
我们再把asp.net的代码做一点小小的修改,修改如下:
Inherits System.Web.UI.Page
Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim i As Integer
i = Timer * 1000
Dim j As Integer
Dim k As Integer
Dim l As Integer
k = 0
For j = 0 To 500
l = 0
For k = 0 To 5000
l = l + k
Next
Next
Response.Write(k)
Response.Write("<br>")
i = (Timer * 1000) - i
Response.Write(i)
End Sub
End Class
这段代码和前面的代码的区别就是,显式定义了变量的类型,看看运行结果:
5001
0
这次,asp.net在速度上取得了明显的优势。
再把j的范围扩大到5000,得到的结果:
5001
47
速度仍然很快。
这个试验体现了asp和asp.net的本质区别。
asp使用的是脚本语言,是解释执行的。而且asp的数据类型是在运行程序时才确定的,也就是说,我们无法使用:
dim a as integer
这样的方法来声明一个变量的类型。在变量定义的时候,是作为一个object型的变量出现的。
而asp.net使用的语言是编译性的语言,可以选用c#,也可选用vb。在这个试验中我们选用的是vb。
在asp.net的第一段代码中,我们定义了变量,但是没有说明变量的类型,这时,编译器就把这个变量当作object类型,这就造成了第一段代码执行非常缓慢,甚至比asp的代码还慢。
第二段代码我们在定义变量的同时说明了变量的类型,这时编译器就对程序按照声明的类型进行优化,速度提升非常明显。
由此,可以得到结论,在使用.net编程的时候,尽量避免使用object类型,这样可以大大提高程序的效率。