工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VB.net > 正文
用锯齿形数组提高.NET应用程序速度
[文章信息]
作者:子夜
时间:2004-11-16
出处:天极网
责任编辑:方舟
[文章导读]
锯齿形数组,也称作数组的数组,不仅仅提供在某种条件下的空间存储,而且提供了加强执行
advertisement
热点推荐
· Java加密和数字签名编程快速入门
· 在VB6中用命令行为模式控制GUI动作
· Excel图表向导详解
· 浅析各种计算机病毒应对方法
· 2月16日软件精选 春节文章精彩回顾
[正文]
  锯齿形数组,也称作数组的数组,不仅仅提供在某种条件下的空间存储,而且提供了加强执行。

  在.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%。


天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • Visual Basic.NET中组件的叠加使用
  • VB.NET中的TextBox控件详解
  • 用VB.NET打造个性化ListBox控件
  • VB.NET状态栏控件上添加任意控件
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • 国信办督战八大行业灾难备份 将出台国家标准
  • 中国IT企业走进欧盟 搭第六框架计划直通车
  • 美邦银行用户注意 警惕新型“钓鱼”邮件
  • 微软三年时间磨出新IE 具有更强大安全性能
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索