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

    技术2022-05-11  116

    http://ike.126.com

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

    Private multi(12, 31) As IntegerPrivate 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 NextEnd 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 SubPrivate 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%。

    更多文章请点击左边的“文章”和“存档”分类

    文章

    c#(RSS) 其他(RSS) 通用算法(RSS) 杂谈(RSS)

    存档

    2005年12月(139) 2005年11月(11) 2005年08月(2) 2005年04月(2) 2005年01月(3)

    最新回复(0)