通过VS2010性能分析来查找代码中那些地方最损耗资源

标签: vs2010 性能分析 代码 | 发表时间:2011-10-12 00:47 | 作者:smark Bloger
出处:http://www.cnblogs.com/

  在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好。很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题。VS2010提供了性能分析工具就能轻松地帮我们解决这一事情。

  • 假设现在写了一个组件,很想知道组件和代码的性能情况。这个可以简单地写一个测试程序。
View Code
    class Program
{
static List<Expression> mExpressions = new List<Expression>();
static Random mRan = new Random();
static void Main(string[] args)
{
try
{
string dbpath = @"Data Source=d:\\northwind.db;Pooling=true;FailIfMissing=false;";
DBContext.SetConnectionDriver<SqliteDriver>(ConnectionType.Context1);
DBContext.SetConnectionString(ConnectionType.Context1, dbpath);
mExpressions.Add(Order.shipCountry == "Switzerland");
mExpressions.Add(Order.shipRegion == "RJ");
mExpressions.Add(Order.customerID.In(Customer.customerID, Customer.country == "UK"));
mExpressions.Add(Order.customerID.In(Customer.customerID, Customer.country == "Germany"));
mExpressions.Add(Order.orderDate > "1997-8-5");
mExpressions.Add(Order.orderDate < "1997-12-1");
mExpressions.Add(Order.orderDate > "1997-5-1" & Order.orderDate<"1997-11-5");
System.Threading.Thread thread;
for (int i = 0; i < 10; i++)
{
thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Test
));
thread.Start();
}

}
catch (Exception e_)
{
Console.WriteLine(e_.Message);
}

}
static void Test(object obj)
{
while (true)
{
Expression exp = mExpressions[mRan.Next(mExpressions.Count - 1)];
Console.WriteLine(exp.Count<Order>());
System.Threading.Thread.Sleep(mRan.Next(50, 5000));
}
}

}
  • 测试程序写好后可以通过VS2010分析菜单里选择启用性能向导

  • 选择CPU采样后就选择需要分析的项目

  • 测试项目选择完成后就可以运行分析,结束分析后VS2010会提供个详细报告文档

  • 从分析结果来看GetConnection这个方法占用的比例是最严重的,我们可以点击进去看下这函数倒做了些什么,那些代码损耗得最利害。

  • 从上面结果来看损耗最利害的是创建ConnectionContext对象,这个时候我们可以进一步点击进去看个究竟

  • 这个方法还没发现真正的原因,我们继续往下走

  到了这里发现原来是connection.Open方法占用了大部分资源,这个时候就想到这个测试程序跑这么久为什么连接打开这么损耗资源,是不是连接池没有开启导致每次操作都进行数据库连接操作呢?

  其实VS2010给我们提供的分析工具真得很轻松就可以让我们了解到程序代码状况,从而优化程序的代码。如果有这烦脑的朋友不防试下:)
 

 

 

作者: smark 发表于 2011-10-12 00:47 原文链接

评论: 17 查看评论 发表评论


最新新闻:
· iTunes 10.5正式发布 iOS 5今夜到来(2011-10-12 12:12)
· 一切就绪?iOS 5完美越狱即将放出(2011-10-12 12:10)
· Google财报看点:经济衰退和手机战略(2011-10-12 12:07)
· 10万中国开发者感恩乔布斯:累计分成10亿元(2011-10-12 12:06)
· 微软全面推送10月安全补丁 修复23个漏洞(2011-10-12 12:01)

编辑推荐:ASP.Net MVC3 简单入门第一季(四)

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [vs2010 性能分析 代码] 推荐:

通过VS2010性能分析来查找代码中那些地方最损耗资源

- Bloger - 博客园-首页原创精华区
  在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好. 很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题. VS2010提供了性能分析工具就能轻松地帮我们解决这一事情. 假设现在写了一个组件,很想知道组件和代码的性能情况.

Android应用性能 分析

- - CSDN博客推荐文章
  其实主要是内存方面,内存管理是个永恒的话题. 1.从工具DDMS中,在Sysinfo的tab栏里面有一个Memory usage的选项,通过USB连接Android设备以后很容易抓到图. 在图中可以看到系统随时可以用的内存是Free和Buffers两项,因为我抓图的系统只有128M的内存,所以看上去这部分可用内存已经很少了.

lucene MoreLikeThis性能分析

- - 七磅-d0evi1
最近使用lucene的MoreLikeThis实现一个小型的推荐系统. 语料由短文本构成,本身也还算比较中小等规模:7000w左右(亿级别)的数据量,3G大小的文件. 对需要的Field建完索引后的索引文件大小在4G左右. 本文只是结合自己的实践列出一些注意事项,以做为参考. 一、MoreLikeThis实现原理.

Akka简单性能分析

- - 并发编程网 - ifeve.com
因为最近工作的关系,要把异步任务从应用服务器中拆分到专门的异步处理服务器中. 是采用MQ的方式将任务消息发出,在服务端进行处理,如下图所示:. 这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理. 这种方案的不足是,可能在某些需求的情况下,需要将结果存放到共享的HashMap或者Threadlocal中进行存放结果,客户端会一直阻塞,直到得到结果,从多线程的角度来说,还是用了共享变量,虽然共享变量可能是线程安全的,但是从并发模型的角度来讲,并不是一个最好的方式.

leveldb性能分析和表现

- Adam - Erlang非业余研究
原创文章,转载请注明: 转载自Erlang非业余研究. 本文链接地址: leveldb性能分析和表现. Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计. 那么数据库最怕的的随机IO他是如何解决的呢.

分布式事务性能分析

- wangdei - 风轻扬
这两年来,随着NoSQL系统、CAP理论和Eventual Consistency的大热,关于分布式操作要保证强一致还是弱一致性的讨论络驿不绝. 双方各执一词,倾向实现强一致性的一方认为弱一致性满足不了应用开发的需要,倾向实现弱一致性的一方则认为保证强一致性将导致系统性能与可伸缩性难以接受. 弱一致性能否满足应用开发的需求这一点由应用特征决定,难以一概而论,但强一致性对系统性能、可伸缩性和可用性的影响则是可以作技术分析的.

leveldb性能分析和表现

- mbcw - IT技术博客大学习
    Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计.     那么数据库最怕的的随机IO他是如何解决的呢.     先说随机写,它的写都是先记录到日志文件去的,在日志文件满之前只是简单的更新memtable,那么就把随机写转化成了顺序写.

Rails3中的性能分析方法

- - Taobao QA Team
(转帖请注明出处: http://qa.taobao.com/?p=15025). 性能分析是Web应用开发中非常重要的一个环节,相比访问缓慢的站点,访问快速的站点拥有更好的用户体验,帮助用户节省更多时间,带来更多的用户访问. 作为当前十分流行的Web框架, rubyonrails当然也提供很多方式进行性能分析.

【转载】HTML5性能分析面面观

- - HTML5研究小组
从性能角度来说,HTML5首先是缩减了HTML文档,使这件事情变得更简单. 第一,从用户可读性上说,原先一大堆东西,像初学者第一次看到这些东西是看不懂的,而HTML5的声明方式对用户来说显然更友好一些. 第二,文档编码的声明,用HTML5方式的话,就很简单. 我们说可以先用HTML5的方式就是把DOCTYPE先改了,因为目前很多页面都还是用传统的方式.

[转][转]LevelDB性能分析和表现

- - heiyeluren的Blog
LevelDB是一个Google开发的速度飞快的数据库键值存储引擎,可按照字符串键值顺序映射. 2011年7月30日 Google宣布按照BSD许可 开源LevelDB. LevelDB是一个C++库,可用于很多情况. 比如用于一个网页浏览器存储最近存取网页的缓存,或用于操作系统存储安装包列表,或用于应用存储用户的设置参数.