.NET程序优化小记(欢迎拍砖)

artwl_cn 2010-08-31 09:32:08
今早胡乱写了一篇博客,拿出来供大家讨论一下,欢迎拍砖。
.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近两年的一点心得,算是抛砖引玉,供有兴趣的朋友讨论参考,因为本人也是新人,可能说的有不准确和错误的地方,欢迎大家指正,也希望大家能够补充。
...全文
268 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
licp280 2010-08-31
  • 打赏
  • 举报
回复
不错,谢谢分享
zhubo006 2010-08-31
  • 打赏
  • 举报
回复
rwm5366745 2010-08-31
  • 打赏
  • 举报
回复
分享~~~~~
顶........
shijilqf 2010-08-31
  • 打赏
  • 举报
回复
大家有.NET学习的好书推荐没有?
凯中凯 2010-08-31
  • 打赏
  • 举报
回复
还是有用,谢谢楼主
chokobo 2010-08-31
  • 打赏
  • 举报
回复
7、试着用Dictionary应用取代某些Switch,原因如下:

对我们已经明确知道对应结果而通常不会更改的(如北京区号010,上海区号021),我们可以把Switch改为Dictionary,减少了查找次数,可以提高率效。

难道Switch语句会判断所有的case分支吗,如果那样的话不是和if,elseif语句一样了?如果有10个case分支,并且是最后一个分支命中的情况下,难道是做了10判断吗?

感觉case和字典的key比较类似,虽然不是很清楚,但是对于说字典的效率高比较怀疑。
subgreatgod 2010-08-31
  • 打赏
  • 举报
回复
帮顶
artwl_cn 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 wschenqing 的回复:]
小弟菜鸟 ,客户端js和服务端验证都能写,但是怎么用服务器端判断用户有没有禁用JS,
[/Quote]
写的有,请仔细看哈
chokobo 2010-08-31
  • 打赏
  • 举报
回复
4、如何防止用户禁用JS来输入非法数据:
可用双重检测,客户端用JS,服务器端判断用户有没有禁用JS

客户端可以不禁用js,只是绕过某段check逻辑,从安全性角度来说,服务端还是要做数据的合法性检查。
liaoyukun111 2010-08-31
  • 打赏
  • 举报
回复
谢谢分享!
LQ_651119244 2010-08-31
  • 打赏
  • 举报
回复
谢谢分享!
george010 2010-08-31
  • 打赏
  • 举报
回复
用foreach循环比for效率高一倍,以前for写惯了,最近才发现,看来优化的道路是要靠一点一滴的积累。
wilensky 2010-08-31
  • 打赏
  • 举报
回复
感谢分享
DevinHu 2010-08-31
  • 打赏
  • 举报
回复
飘过,顺便接个分
边城的刀声 2010-08-31
  • 打赏
  • 举报
回复
《.NET 设计规范》第二版
边城的刀声 2010-08-31
  • 打赏
  • 举报
回复
《.NET 设计规范》
悟__空 2010-08-31
  • 打赏
  • 举报
回复
学习啦 每天回帖即可获得10分可用分!
s370092561 2010-08-31
  • 打赏
  • 举报
回复
学习了!
银-魂 2010-08-31
  • 打赏
  • 举报
回复
顶!sf虽有主,我有松松土
合肥小菜 2010-08-31
  • 打赏
  • 举报
回复
加载更多回复(9)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧