码迷,mamicode.com
首页 > Web开发 > 详细

如何写出高性能的.net程序

时间:2015-01-27 20:13:28      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

本文是一个小工作总结。 总结这么久的性能优化经验。 

 

有一次电话面试, 面试官说我简历里提到了性能优化, 他问我性能优化有什么章法吗?给他说说。 

我当时真迷糊了。 真的,做了这么久的性能优化还真不知道性能优化有什么章法。 

一直是自己凭感觉乱弄, 运气比较好, 还真的可以弄到点子上, 运行时间急剧缩短。 

 

一提起优化, 大家第一反应就是算法。 

不过说来惭愧, 我这种懒人, 对算法最一头雾水了, 算法导论买回来看了前几页就扔那压东西了, 

现在好像还丢了。 不知道哪次搬家弄没了。 

 

所以本文的主要核心就是如何在不懂算法的前提下, 进行性能优化。 

从现在开始开启干货模式

===================================

提高性能的核心思想就是: 别犯二

 

1 别犯二之:少做没用的事情

最简单的一件事, 

就只是让你写个函数:提取出最大的那个数。 

你非写个排序算法出来然后选top 1, 你这不找抽吗。 

 

就只是让你看字符串是否匹配正则表达式, 你非把正则表达式execute一次,连分组都提取完了然后一看说哦, 符合

这不是自找苦吃吗?

 

就只是让你生个孩子你非要找个帅哥结婚。。。。

哎, 不多说了。 

 

2 别犯二之:少做“可扩展性”设计

第一次被教训是校园招聘的时候。 人家让写个函数, 输出所有小于10的5次方的数字。 

我们写了个“返回M的N次方”的函数, 并且运算出个结果, 然后再去for循环。 

结果我们全被刷了。 

后来有人过了。 

我们问它咋写的?

他说:for(int i = 0; i < 100000;i++).......

尼玛。 

时刻记住:你做十次“可扩展性设计”,有九次是没用的。 

还有一次会被后人重构一次, 然后才有用。 

写出“容易重构”的代码就足以。 重构的人已经知道哪里需要“可扩展”了, 他们才是最适合做“可扩展性”的人。 

哪怕这个人可能是未来的你。 

3 别犯二之:别信测试数据,尤其是运行时间。 

第一次接受教训是工作第一年, 公司内部一个讲座。 

一个人写了个程序, 来证明StringBuilder比拼String更快。 

然后写完了有个人站出来说, 你的结论虽然是对的, 但是你这个测试数据是不对的。 你每次拼string的时候都调用两次Console.WriteLine, 用StringBuilder的时候却用了一次, 你这实际上是作弊帮人家赢取比赛。 

我们都有过这种经历吧:数学课, 证明题, 每个人都证明出来了, 但是有人得分有人不得分。 

得分的同学过程大差不差, 做错的人则是千奇百怪, 但是神奇的是, 他们居然也能证明出这个结论。 

充分证明了, 过程不靠谱, 结论才重要。 而测试数据, 就是个用于推导“谁更快”的过程。 

4 别犯二之:别跟测试结果叫号。 

这条看起来似乎和3冲突, 实际上。。。 

有的时候确实有点冲突。 

当测试结果说, 你这个性能有问题, 这时候大部分人的想法是:

你测错了吧?我的代码怎么会有问题。 

当产生这个疑问的时候, 十有八九是你的代码有问题。 

5 别犯二之:先做基础优化

做sql server查询优化连个索引都不加你优化个鬼啊!

做C#你连调用次数都统计不出来你优化谁啊?

做JavaScript优化你连全局变量都没搞定你还考虑什么性能啊!

基础优化做完可以解决90%的性能问题。 

我在公司一直重复一句话:

给sql加索引可以解决90%的查询性能问题, 剩下10%的问题应该让DBA去处理。 

6 别犯二之:转移压力

不要以为运行时间短才叫性能优化, 有的时候运行时间一秒不少, 让用户感觉快了, 也叫优化。 

最典型的就是把JavaScript文件放到body的末尾。 

有的人认为这是奇技淫巧, 但是实际上这相当有效。 

如果你的JavaScript文件比较大, 可能需要一秒钟才能下载完, 那么在下载期间你的网页就是一片空白。 

而放到结尾, 虽然还没下载完, 但是网页已经可以用了!

对于用户来说, 这就是快!

还有就是先把网页加载完, 图片和一些不重要的js在后台慢慢去load

这些都是出于相同的目的:让“感觉”变快。 

7 别犯二之: 重复运算。 

大部分所谓的优化只是去掉了重复运算的代码。 

否则业务逻辑半点没删, 凭什么运行速度比以前快?

前人犯二, 后人填坑, 我们称之为优化而已。 

举个例子, 我以前见过一个数据库导入导出的程序, 

分别读取了来自新加坡的一个表, 澳大利亚的一个表, 还一个位于美国的表。 

还进行了一堆运算, 然后由于网速很慢, 跑一次要一分钟。 

这也是没办法的事情对吧?

可是他在一个for里面不断的做这个事情!

而后来的优化则相当让人喷饭。 

程序员看了下, 表不大, 直接读出来放本地, 

一下子搞定了一切。 运行时间从5个小时优化成了三分钟。 

尼玛, 这不是坑爹吗。 这是做优化的程序员牛逼吗?

不是, 这是前人犯的二, 太严重。 

 

总体先说这些。 因为我发现下班时间到了。 

如何写出高性能的.net程序

标签:

原文地址:http://www.cnblogs.com/ArthasCui/p/4253737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!