中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > .NET > VB.NET
用锯齿形数组提高.NET应用程序速度
作者:子夜 时间:2006-08-19 03:07 出处:天极网 责编:月夜寒箫
              摘要:用锯齿形数组提高.NET应用程序速度
 锯齿形数组,也称作数组的数组,不仅仅提供在某种条件下的空间存储,而且提供了加强执行。

  在.NET中可以使用有的三种类型数组:一维数组,多维数组和锯齿形数组。锯齿形数组,也称作数组的数组,不仅仅在某种条件下提供存储空间,而且象我们示范的一样提供增强执行。

  在本文中,我们将使用一个多维数组和一个锯齿形数组保存一年中的每一天的任意值。两个多维数组将允许我们通过提供月份和天的索引,得到一年中的任何一天。我们应用以下语法声明数组。

Private multi(12, 31) As Integer
Private jagged(12)() As Integer

  注意对于多维数组,我们需要声使用在一个月中可能出天的天数(31)的最大值来声明第二维。在这两维中,既然每一行有同样的列数,可以将一个多维数组考虑成一个方形的。这将导致与一个有效相关的而非所有数组输入的空间浪费,例如,在四月中没有31天。

  另一方面,锯形数组允许你对每一行分配不同列数。在GreateArrays的下列子程序中,在循环之中装配两个数组。注意:锯齿形数组初始化包括附加一步来对每一个月的天数数组分配内存。与多维数组比较起来,对需要的一个月份使用精确数量的存储会节省一少部分存储器。用数组描述年历节省的空间是少量的,但是其它程序节省空间可能是非常重要的。

Private Sub CreateArrays()
 Dim i As Integer
 Dim j As Integer
 Dim random As New Random()

 ' initialize multi dimension array with random data for each day
 For i = 0 To 11
  For j = 0 To DateTime.DaysInMonth(DateTime.Now.Year, i + 1) - 1
   multi(i, j) = random.Next(100)
  Next
 Next

 ' allocate and initialize jagged array with random data
 For i = 0 To 11
  jagged(i) = New Integer(DateTime.DaysInMonth(DateTime.Now.Year, i + 1)) {}
  For j = 1 To DateTime.DaysInMonth(DateTime.Now.Year, i + 1) - 1
   jagged(i)(j) = random.Next(100)
  Next

 Next
End Sub

  显而易见,与一个多维数组相比时候,锯齿形数组因为在循环中分配内存步骤而多需要一小部分时间。然而,当提到存储和重述数组时,你会对锯齿形数组做得比多维数组做的好时而惊奇。在.NET framework 版本1中,在锯齿形数组的JIT编译器中,已存在了较好的最优化。为了证明这一点,让我们看一看当每次运行测试页时两个最好的子程序。

Private Sub TestSquareArray()
Trace.Write("Beginning TestSquareArray")

 Dim i As Integer
 Dim j As Integer
 Dim k As Integer
 Dim sum As Int64

 sum = 0
 For i = 0 To 65525
  For j = 0 To 11
   For k = 0 To DateTime.DaysInMonth(DateTime.Now.Year, j + 1) - 1
    sum = sum + multi(j, k)
   Next
  Next
 Next

 Trace.Write("Ending TestSquareArray")
End Sub

Private Sub TestJaggedArray()
 Trace.Write("Beginning TestJaggedArray")

 Dim i As Integer
 Dim j As Integer
 Dim k As Integer
 Dim sum As Int64

 sum = 0
 For i = 0 To 65525
  For j = 0 To 11
   For k = 0 To DateTime.DaysInMonth(DateTime.Now.Year, j + 1) - 1
    sum = sum + jagged(j)(k)
   Next
  Next
 Next

 Trace.Write("Ending TestJaggedArray")
End Sub

  每一个子程序将每一个数组内的值加求和。我们在另一个大循环中反复这样做,延长计算时间和查看更多的意味深长的时间信息。在我们能够追踪之后,我们能够看下列网页显示的时间信息。存取锯齿形数组的程序往往比多维数组版的快20%。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有