| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1027 人关注过本帖
标题:怎样对自己写的程序进行优化?
只看楼主 加入收藏
a54400950
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-2
结帖率:0
收藏
已结贴  问题点数:10 回复次数:11 
怎样对自己写的程序进行优化?
我是一个 的新手,我想请教一下怎样去优化自己所写的代码,谢谢!
搜索更多相关主题的帖子: 优化 
2010-07-02 17:24
yms123
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:2 
注意嵌套循环,还有就是注意多表查询。
2010-07-02 18:23
yms123
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
foreach要比for循环消耗内存大一些
2010-07-02 18:24
a54400950
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-2
收藏
得分:0 
谢谢,谢谢哦,今天没有白活
2010-07-02 19:11
saitor
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:5
帖 子:373
专家分:1520
注 册:2009-5-18
收藏
得分:2 
foreach要比for循环消耗内存大一些
这个结论怎么得出来的?JS?
2010-07-02 20:06
a54400950
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-2
收藏
得分:0 
上面的结论是怎么得到的
2010-07-02 20:42
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:2 
以下是引用yms123在2010-7-2 18:24:44的发言:

foreach要比for循环消耗内存大一些
(引用)

在很多情况下for和foreach具有同样的功能,选择for还是foreach很多人可能都是看自己的喜好,本测试试图通过来真是测试数据来比较他们的执行效率。希望能给大家对他们的时候带来一些帮助。

测试环境:     
        硬件环境:       PIII800   +   CPU456
        软件环境:            +   C#

测试用例:
        利用结果集来存放记录,初始化对结果集添加记录
        分别对记录数为10000,100000,1000000条记录的时候进行采样分析

        关键测试对比代码如下,功能完全一样:
        //foreach开始时间
      datetime3   =   System.DateTime.Now.TimeOfDay.ToString();
      foreach(DataRow   row   in   relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows)
  buffer   =   row[RelationData.PK_TABLE_NAME].ToString();
      datetime4   =   System.DateTime.Now.TimeOfDay.ToString();

      //for开始时间
      datetime5   =   System.DateTime.Now.TimeOfDay.ToString();
      for(int   j=0;j <1000000;j++)
                  buffer   =   relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows[j][RelationData.PK_TABLE_NAME].ToString();
      datetime6   =   System.DateTime.Now.TimeOfDay.ToString();
  
测试结果:
      10000条记录时:
                  foreach读取时间:16:29:34.2577584   
                  foreach结束时间:16:29:34.2677728   
                  for读取开始时间:16:29:34.2677728   
                  for读取结束时间:16:29:34.2878016
      100000条记录时:
                  foreach读取时间:16:31:10.1055808   
                  foreach结束时间:16:31:10.1957104   
                  for读取开始时间:16:31:10.1957104   
                  for读取结束时间:16:31:10.4460704
      1000000条记录时:
                  foreach读取时间:16:33:12.6217504   
                  foreach结束时间:16:33:13.6332048   
                  for读取开始时间:16:33:13.6332048   
                  for读取结束时间:16:33:18.7906208

结果分析:
      1)对于10000条记录可以看出
                  foreach用了   0.0100144     
                  for循环用了0.0300432   
                  foreach所花的时间正好是for循环的   1/3   
      2)对于100000条记录可以看出
                  foreach用了0.0901296      
                  for循环用了0.2503600
                  foreach所花的时间是for循环的   36%
      3)对于1000000条记录结果可以看出
                  foreach用了1.0114544      
                  for循环用了4.1574160
                  foreach所花的时间是for循环的   25%

        通过对这些测试结果的分析,可以看出相对于原来的for语句foreach具有
更好的执行效率,foreach的平均花费时间只有for30%。通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach.在测试同时
我们附加的发现,用for写入数据时间大约是读取数据时间的10倍左右.:P

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-07-06 09:39
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
foreach在提高效率的同时,还是会有些弊端的,因为网上比较公认的说法是foreach封装了for,所以其占用更多的内存是应该的,并且foreach不能对其中的行进行删除,否则会报异常

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-07-06 09:42
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:2 
同意7楼,foreach比for好一些.呵呵.
以前我也测试过.

飘过~~
2010-07-06 09:43
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
以下是引用冰镇柠檬汁儿在2010-7-6 09:42:45的发言:

foreach在提高效率的同时,还是会有些弊端的,因为网上比较公认的说法是foreach封装了for,所以其占用更多的内存是应该的,并且foreach不能对其中的行进行删除,否则会报异常

A.不能修改的是foreach引用变量,因为它是引用的,对它的修改没有意义也没有作用,它就像一个c/c++指针那样对集合中的元素进行指向引用;我们能通过引用看到它,但是没有能力动它。

B.in之前的变量是引用变量,但in之后的集合确是实实在在的,所以可以对它操作,像.ADD();REMOVE()等方法可以使用。
C.foreach引用变量大概是通过地址指向后面的集合(我猜想跟c/c++的指针很像),当修改了集合的元素时,地址可能发生某种改变,所以不跳出循环继续遍历时,就可能出现引用找不到的情况,出现超出集合的异常所以,即使是使用REMOVE() 这样的方法后,跳出循环是不会出错的,但是继续循环,则会出错。切记,切记。

飘过~~
2010-07-06 09:52
快速回复:怎样对自己写的程序进行优化?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023045 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved