今早胡乱写了一篇博客,拿出来供大家讨论一下,欢迎拍砖。
.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近两年的一点心得,算是抛砖引玉,供有兴趣的朋友讨论参考,因为本人也是新人,可能说的有不准确和错误的地方,欢迎大家指正,也希望大家能够补充。