加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#中字段与属性性能比较

(2009-05-17 14:23:23)
标签:

it

分类: ASP.NET
 【摘要】【目的】比较字段与属性读取的性能【结论】使用字段比属性赋值,快50-60倍左右,读取,快3倍左右。但是它不可能成为影响性能的主要瓶颈

     Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。

      把所有的字段都设为私有字段,如果要暴露它们,则把它们封装成属性。这也是微软推荐的方式。具体的好处此处不赘述。

     属性的实质是方法(get和set方法),IL中没有属性的概念。因此,使用属性必然会带来性能的降低。到底使用属性和使用字段的性能差多少。我自己写了一个小程序进行测试。主要代码如下:

 

http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifCode
    public class TestFeildProperty
    {
        
static readonly int _RunTime = 10000000;
        
public static void UseField()
        {
            DateTime begin 
= DateTime.Now;
            
int milliSecondBegin = DateTime.Now.Millisecond;
            
for (int = 0< _RunTime; i++)
            {
                _TestField 
= 1;
            }
            DateTime end 
= DateTime.Now;
            TimeSpan result 
= end - begin;
            Console.WriteLine(result.ToString());
        }
        
public static void UseProperty()
        {
            DateTime begin 
= DateTime.Now;
            
int milliSecondBegin = DateTime.Now.Millisecond;
            
for (int = 0< _RunTime; i++)
            {
                TestField 
= 1;
            }
            DateTime end 
= DateTime.Now;
            TimeSpan result 
= end - begin;
            Console.WriteLine(result.ToString());
        }

        
static int _TestField;
        
static int TestField
        {
            
set  _TestField = value; }

            get  return _TestField;   }

        }

   }

 

      测试方式为对字段和属性循环赋值和读取(以上代码只有赋值部分)。

 

http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifCode
    class Program
    {
        
static void Main(string[] args)
        {
            TestFeildProperty.UseField();
            TestFeildProperty.UseProperty();

        }

    }

 

 

测试结果
表1 循环赋值  
  一千万次 一亿次
字段 0.03125秒

0.3125秒

属性 1.702315秒 17.140625秒
表2 循环读取  
  一千万次 一亿次
字段 0.03125秒

0.2825秒

属性 0.09375秒 0.984375秒

      结论:使用属性和字段之间的性能差距大概是:赋值,50-60倍左右,读取,3倍左右。

      补充:这个测试结果只是针对int型的,也许对字符串或者其他类型的会有不同结果。
      但是可以看出来,对属性赋值一次的时间是一千万分之一秒,所以即使它比字段赋值慢50倍,它不可能成为影响性能的主要瓶颈。应该可以放心使用。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有