今早胡乱写了一篇博客,拿出来供大家讨论一下,欢迎拍砖。
.NET程序优化小记不说废话了,直接写吧:1、对长度不固定的字符串(如根据条件拼接Sql语句)推荐用StringBuilder类型而不要直接用String,原因如下:      String数据类型代表的是一种不可变的字符串, 对这个字符串的插入删除或是更改时要建立一个新的字符串,会引发对内存的配置操作以及对内存的反配置操作,加重CLR管理内存和内存回收的工作,在操作大字符串时,更为明显,但StringBuilder会保留自己的字符串缓冲区,在针对StringBuilder执行字符串操作时,会先检查缓冲区的大小是否能否容纳新的字符串,不够时再去增加需要的内存数量,因此大幅降低内存配置的操作次数,提高了效能,当然大多数的情况下,多估算一些缓冲区空间比后来又不断加大要好。2、什么时候用静态方法(static方法):      静态方法可以使程序显得简洁,调用更加方便(如.NET自带的MessageBox.Show()方法),但什么时候改用静态方法呢?如果方法与对象实例相关,从属于某个对像,就不用静态方法,如果某个方法并不需要从属于对象或者根本无法从对象上调用,就可以采取静态方法。3、如果用了代码生成器,可以用局部类(partial类)或继承类来增强代码的可维护性:      现在有很多程序员在项目中用了代码生成器,但代码生成器中生成的代码是固定的,有时我们需要增加一些自己的方法,这时最好不要在生成的代码中加(再次生成后替换很不方便),这时我们可以把自己写的方法放在一个局部类(partial类)中,或是放在一个继承于生成的类的新类中,重新生成代码时直接替换生成器生成的类就好了。4、如何防止用户禁用JS来输入非法数据:      可用双重检测,客户端用JS,服务器端判断用户有没有禁用JS,如果禁用再次验证数据合法性,否则进行其他处理。服务器端判断JS是否禁用可以用以下方法,在页面加载事件中写一个JS函数,改变页面某个标签的值,服务器端对此标签进行检测,如果值已更改则JS没有禁用,否则已禁用。5、如果不涉及到对集合数据进行处理(如筛选或者排序)推荐使用IList<T>而非List<T>,ArrayList,原因如下:      对于ArrayList要装箱拆箱,就不说了。对于IList<T>和List<T>,从面向对象设计来讲,使用接口(IList<T>)而非具体类型(List<T>),是OOP中比较普遍的原则,其核心价值在于解除对特定类的依赖,通过接口将对象的行为与具体实现隔离开来,接口实现松耦合,有利于系统的维护与重构,从效率上讲当你只想使用接口的方法时,他不获取实现这个接口的类的其他方法和字段,可以有效的节省空间。6、为了维护的方便,推荐使用IDataReader和IDataAdapter,原因如下:     IDataReader和IDataAdapter是接口,更改数据库时可以不改代码。7、试着用Dictionary应用取代某些Switch,原因如下:     对我们已经明确知道对应结果而通常不会更改的(如北京区号010,上海区号021),我们可以把Switch改为Dictionary,减少了查找次数,可以提高率效。以上是本人自学.NET近两年的一点心得,算是抛砖引玉,供有兴趣的朋友讨论参考,因为本人也是新人,可能说的有不准确和错误的地方,欢迎大家指正,也希望大家能够补充。

解决方案 »

  1.   

    用foreach循环比for效率高一倍,以前for写惯了,最近才发现,看来优化的道路是要靠一点一滴的积累。
      

  2.   

    4、如何防止用户禁用JS来输入非法数据:
    可用双重检测,客户端用JS,服务器端判断用户有没有禁用JS客户端可以不禁用js,只是绕过某段check逻辑,从安全性角度来说,服务端还是要做数据的合法性检查。
      

  3.   

    7、试着用Dictionary应用取代某些Switch,原因如下:  对我们已经明确知道对应结果而通常不会更改的(如北京区号010,上海区号021),我们可以把Switch改为Dictionary,减少了查找次数,可以提高率效。难道Switch语句会判断所有的case分支吗,如果那样的话不是和if,elseif语句一样了?如果有10个case分支,并且是最后一个分支命中的情况下,难道是做了10判断吗?感觉case和字典的key比较类似,虽然不是很清楚,但是对于说字典的效率高比较怀疑。
      

  4.   

    大家有.NET学习的好书推荐没有?
      

  5.   

    小弟菜鸟 ,客户端js和服务端验证都能写,但是怎么用服务器端判断用户有没有禁用JS,