用锯齿形数组提高.NET应用程序速度

转帖|其它|编辑:郝浩|2010-08-17 10:10:56.000|阅读 644 次

概述:锯齿形数组,也称作数组的数组,不仅仅提供在某种条件下的空间存储,而且提供了加强执行。在本文中,我们将使用一个多维数组和一个锯齿形数组保存一年中的每一天的任意值。两个多维数组将允许我们通过提供月份和天的索引,得到一年中的任何一天。我们应用以下语法声明数组。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  锯齿形数组,也称作数组的数组,不仅仅提供在某种条件下的空间存储,而且提供了加强执行。

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

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

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

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

PrivateSubCreateArrays()
 DimiAsInteger
 DimjAsInteger
 DimrandomAsNewRandom()

 'initializemultidimensionarraywithrandomdataforeachday
 Fori=0To11
  Forj=0ToDateTime.DaysInMonth(DateTime.Now.Year,i 1)-1
   multi(i,j)=random.Next(100)
  Next
 Next

 'allocateandinitializejaggedarraywithrandomdata
 Fori=0To11
  jagged(i)=NewInteger(DateTime.DaysInMonth(DateTime.Now.Year,i 1)){}
  Forj=1ToDateTime.DaysInMonth(DateTime.Now.Year,i 1)-1
   jagged(i)(j)=random.Next(100)
  Next

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

PrivateSubTestSquareArray()
Trace.Write("BeginningTestSquareArray")

 DimiAsInteger
 DimjAsInteger
 DimkAsInteger
 DimsumAsInt64

 sum=0
 Fori=0To65525
  Forj=0To11
   Fork=0ToDateTime.DaysInMonth(DateTime.Now.Year,j 1)-1
    sum=sum multi(j,k)
   Next
  Next
 Next

 Trace.Write("EndingTestSquareArray")
EndSub

PrivateSubTestJaggedArray()
 Trace.Write("BeginningTestJaggedArray")

 DimiAsInteger
 DimjAsInteger
 DimkAsInteger
 DimsumAsInt64

 sum=0
 Fori=0To65525
  Forj=0To11
   Fork=0ToDateTime.DaysInMonth(DateTime.Now.Year,j 1)-1
    sum=sum jagged(j)(k)
   Next
  Next
 Next

 Trace.Write("EndingTestJaggedArray")
EndSub
  每一个子程序将每一个数组内的值加求和。我们在另一个大循环中反复这样做,延长计算时间和查看更多的意味深长的时间信息。在我们能够追踪之后,我们能够看下列网页显示的时间信息。存取锯齿形数组的程序往往比多维数组版的快20%。
 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP