首页 新闻 会员 周边

C# 效率问题,请具体解释对内存的操作。

0
[已解决问题] 解决于 2013-05-04 10:40

  主要问题集中在程序是如何对内存操作的。

讨论1:

  注:All为long型变量。

写法1:

  long CountValue = 0;

  CountValue = All - (long)StartPostion;

 写法2:

  long CountValue = All - (long)StartPostion;

 

讨论2:

  写法1:

  public string f1()

  {

    string re="asdf";

    return re;

  }

  写法2:

  public string f2()

  {

    return "asdf";

  }

黑色圣光的主页 黑色圣光 | 菜鸟二级 | 园豆:202
提问于:2013-05-01 15:11
< >
分享
最佳答案
0

在CLR中是一样的,

在CLR中运行,分为堆和栈,值类型在栈中分配内存,而对象在堆中分配内存并将对象的引用(其实就是指针)赋予前面所说的栈中。

讨论1:

写法1:CountValue变量在栈中申请一个long类型的空间,并将0赋给它。然后再讲计算结果赋给它,内存没有发生什么变化

写法2:CountValue变量在栈中申请一个long类型的空间,直接将结果赋给它。

分析:两者在CLR上运行是没有区别的,但有一个编码原则:在声明变量的同时,对变量进行初始化。所以写法2是比较好的。

讨论2:

写法1:string类型是引用类型,所以在堆中初始化一个为"asdf"的string对象,然后把引用赋给re,并return引用。

写法2:直接初始价string对象,return引用

分析:两者在CLR上运行是没有区别的,但有一个编码原则:不要定义不必要的变量。不必要的意思是:对代码没有帮助,并且不能带来可阅读性的改善。所以在这里推荐写法2。如果代码非常复杂,可以用写法1的形式,来改善可阅读性,但是变量名用有意义的名字,就不要写re什么的了。

奖励园豆:5
呆呆蚁 | 菜鸟二级 |园豆:231 | 2013-05-02 09:56

   在此感谢大大!

  补充问下关于CLR的知识在那里能学到?看《clr via C#》这本书怎么样?

黑色圣光 | 园豆:202 (菜鸟二级) | 2013-05-04 10:40

@黑色圣光: 非常推荐这本书,但书有些难度。太难的地方可以跳着看,看完后面的内容再来看。

呆呆蚁 | 园豆:231 (菜鸟二级) | 2013-05-08 17:13
其他回答(1)
0

都一样

chenping2008 | 园豆:9836 (大侠五级) | 2013-05-01 16:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册