对大型网站,技术涉及面非常广,对硬件,软件,编程语言,Web Service,防火墙等等有很高要求。

    面对大量用户,高并发请求,可以使用高性能服务器,高性能编程语言,高性能数据库,加大带宽等,这意味着巨大的投入。

  如果你没有这样的打算,而又想获得更好的系统性能,则需要我们精打细算,从"软"的方面着手。

  如果你有过以下的一些用法,或者有不同见解,请赐教。

  (1)Foreach比for有更好的执行效率。

       Foreach所花的时间大约只有for的30%,通过测试结果,在两者都可以使用的情况下,我们推荐效率更高的Foreach。另外用for写入数据的时间大约是读取数据时间的10倍。

  (2)避免使用ArrayList

    因为任何对象存放到里面,都要转化为System.Object类型,从ArrayList中取出数据要拆箱回原来的类型。建议使用.NET2.0的泛型,这是一个强类型,可以避免装箱拆箱的性能消耗。

  (3)不要使用UpperCase,LowerCase转换字符串,再进行比较。用String.Compare代替,他可以忽略大小写进行比较

  (4)用StringBuilder代替字符串连接符"+"

    原因,见我的另一篇文章String 和BulidString性能比较和内在机制

  (5)避免在循环内声明变量,应该在循环外声明变量,在循环里初始化

 

 1   //避免
2
3    for(int i=0;i<10;i++)
4
5   {
6
7     AnyClass cl=new AnyClass();
8
9     //……
10
11   }
12
13   //推荐
14   for(int i=0;i<10;i++)
15
16   {
17
18     cl=new AnyClass();
19
20     //……
21
22   }

  (6)捕获异常,不用使用System.Exception

 1      //避免
2 try
3 {
4 //TODO
5 }
6 catch (Exception ex)
7 {
8 //TODO(虽然简单,但性能较差)
9 }
10
11     //推荐
12 try
13 {
14 //TODO
15 }
16 catch (System.NullReferenceException ex)
17 {
18 //对空对象异常处理
19 }
20 catch (System.ArgumentOutOfRangeException ex)
21 {
22 //超出范围异常处理
23 }
24 catch (System.InvalidCastException ex)
25 {
26 //对异常转化的处理
27 }

  (7)不要使用异常控制程序流程。

    异常捕获对性能的消耗很大,众所周知的,能避免使用最好不用

 1      //避免
2
3      try
4 {
5 result=200/num;
6 }
7 catch (Exception ex)
8 {
9 result=0
10 }
11
12     //推荐
13 try
14 {
15 result=num!=0?200/num:0;
16 }
17 catch (Exception ex)
18 {
19 result=0
20 }

  (8)在遇到调用实现IDisposable对象的时候,用Using和try/finally来释放资源

 1 //避免
2
3     public void ExceuteCommand()
4 {
5 SqlConnection sql=new SqlConnection(strCon);
6 SqlCommand cmd=new SqlCommand(sql);
7 sql.Dispose();//上面出错,此处有可能永远都调用不到
8 cmd.Dispose();
9 }
10
11      //建议
12
13     //Using内并不是可以放任何对象,只有实现了IDisposable接口的对象才能被使用。
14     //编译器成IL时候,Using会自动把内容放在try/finally里面。
15
16      try
17 {
18 using(SqlConnection sql=new SqlConnection(strCon))
19 {
20 using(SqlCommand cmd=new SqlCommand(sql))
21 {
22   //TODO
23 }
24 }
25 }
26 catch (Exception ex)
27 {
28 //
29 }
30 finally{
31 //或者
32 //sql.Dispose();
33 //cmd.Dispose();
34 }
35
36     //推荐
37
38     因为如果遇到多个实现IDisposable接口的对象需要释放,try/finally更好些
39
40      //推荐
41 SqlConnection sql=null;
42 SqlCommand cmd=null;
43
44 try
45 {
46 sql=new SqlConnection(strCon);
47 cmd=new SqlCommand(sql);
48 sql.Open();
49 cmd.ExecuteNonQuery();
50
51 }
52 finally{
53 if(sql!=null)
54 sql.Dispose();
55 if(cmd!=null)
56 cmd.Dispose();
57 }

  (9)避免使用反射,反射是比较浪费性能的操作

    通过反射来调用类型或方法,字段或属性是CLR要做更多的工作,如校验参数,检查权限,所以速度是非常慢的。对于打算写一个动态构造类型(晚绑定)的应用程序,可以通过继承,接口,委托来实现。

  (10)值类型组合成字符串,请使用.ToStrng()方法,避免装箱操作。

1           //避免
2
3     var str="hello"+1+2;
4
5     //推荐
6
7     var str="hello"+1.ToString()+2.ToString();

  (11)StopWatch类测试运行时间

 
1 public delegate void AddHandler();
2 class Program
3 {
4 static void Main(string[] args)
5 {
6 Utility.ProcessTimeSpan(Program.Add);
7 Console.Read();
8 }
9
10 public static void Add()
11 {
12 var a = 0;
13 for (int i = 0; i < 100000000; i++)
14 {
15 a++;
16 }
17 }
18 }  
19
20   public static class Utility
21 {
22 public static void ProcessTimeSpan(AddHandler addDelegate)
23 {
24      //推荐
25 DateTime start = DateTime.Now;
26 var timer = Stopwatch.StartNew();
27 addDelegate();
28 timer.Stop();
29 Console.WriteLine("Method took {0} ms", timer.ElapsedMilliseconds);
30
31      //传统
32
33     DateTime start = DateTime.Now;
34     SomeCodeToTime();
35     DateTime end = DateTime.Now;
36     Console.WriteLine("Method took {0} ms", (end - start).TotalMilliseconds);
37
38
39
40 }
41 }

网站优化的经验和技巧--精简高效的C#的更多相关文章

  1. 精简高效的css命名准则

    对于css,为了避免样式冲突,我们总会赋予相当特殊的命名,或是在选择符上添加html标记,或是使用层级.我们为避免在冲突上做文章,就会把代码的命名变得复杂化. 如果css的重用性越高,相比就越高效.如 ...

  2. 知名网站内部资料:WEB页面内容优化管理与性能技巧

    回想一下,以前我们不得不花费大量时间去优化页面内容(图片.CSS等等),如今用户有更快速的互联网链接,我们似乎能够使用更大的图像或更大的闪 存文件,里面包含的有视频或者图片.然而,随着移动开发的兴起, ...

  3. Yahoo团队总结的关于网站性能优化的经验(转)

    英文原文:http://developer.yahoo.com/performance/rules.html 中文原文:http://www.ha97.com/2710.html 1.尽量减少HTTP ...

  4. [css] 【转载】 精简高效的CSS命名准则/方法

    原文链接:http://www.zhangxinxu.com/wordpress/2010/09/%E7%B2%BE%E7%AE%80%E9%AB%98%E6%95%88%E7%9A%84css%E5 ...

  5. 大话SEO网站优化|SEO优化入门技术详解

    网络营销 网络营销是借助一切被目标用户认可的网络应用服务平台开展的引导用户关注的行为或活动,目的是促进产品在线销售及扩大品牌影响力. web1.0时代有搜索引擎营销.BBS营销.邮件营销.病毒式营销. ...

  6. web 页面内容优化管理与性能技巧

    回想一下,以前我们不得不花费大量时间去优化页面内容(图片.CSS等等),如今用户有更快速的互联网链接,我们似乎能够使用更大的图像或更大的闪存文件,里面包含的有视频或者图片.然而,随着移动开发的兴起,我 ...

  7. 二十种实战调优MySQL性能优化的经验

    二十种实战调优MySQL性能优化的经验 发布时间:2012 年 2 月 15 日 发布者: OurMySQL 来源:web大本营   才被阅读:3,354 次    消灭0评论     本文将为大家介 ...

  8. IOS 性能优化的建议和技巧

    IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelo ...

  9. Java Web 高性能开发,第 3 部分: 网站优化实战

    这个系列的前两篇,介绍了前端的优化技术,这些技术秉承了前人至高无上的智慧,我只是负责吸收和传播.然而,这些技术一般也都是某某大型网站的技术经验,我们大部分人或许只能接触到相对小规模的网站,小规模的网站 ...

随机推荐

  1. Google面试题之100层仍两个棋子

    一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层 ...

  2. C#学习笔记二:C#程序结构

    从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 ...

  3. jdk jre jvm 关系

    很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...

  4. 【CF】86 B. Petr#

    误以为是求满足条件的substring总数(解法是KMP分别以Sbeg和Send作为模式串求解满足条件的position,然后O(n^2)或者O(nlgn)求解).后来发现是求set(all vali ...

  5. pcDuino 刷系统-卡刷

    准备: pcduino : 点此购买 支持HDMI的显示器:点此购买  或参考无显示器刷机与使用.至少1张4G microSD卡,如果内存卡不大,可以用内存卡刷内核,用u盘刷系统 背景:本教程中使用的 ...

  6. android layout 属性大全

    第一类:属性值为true可false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:la ...

  7. 新浪微博授权时出现"关注 *** 的微博"

    基本设置完成后, 保证scope是 "all" 或 至少 包含 "follow_app_official_microblog". 测试时, 保证你的测试账号没有 ...

  8. 【转】关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

    原文网址:http://www.cnblogs.com/cywin888/p/3263027.html 刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成 ...

  9. Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案

    注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明.   Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...

  10. [C# 网络编程系列]专题三:自定义Web服务器

    转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网 ...