通过VS2010性能分析来查找代码中那些地方最损耗资源
2011-10-17 10:34
363 查看
在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好。很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题。VS2010提供了性能分析工具就能轻松地帮我们解决这一事情。
假设现在写了一个组件,很想知道组件和代码的性能情况。这个可以简单地写一个测试程序。
View
Code
测试程序写好后可以通过VS2010分析菜单里选择启用性能向导
选择CPU采样后就选择需要分析的项目
测试项目选择完成后就可以运行分析,结束分析后VS2010会提供个详细报告文档
从分析结果来看GetConnection这个方法占用的比例是最严重的,我们可以点击进去看下这函数倒做了些什么,那些代码损耗得最利害。
从上面结果来看损耗最利害的是创建ConnectionContext对象,这个时候我们可以进一步点击进去看个究竟
这个方法还没发现真正的原因,我们继续往下走
到了这里发现原来是connection.Open方法占用了大部分资源,这个时候就想到这个测试程序跑这么久为什么连接打开这么损耗资源,是不是连接池没有开启导致每次操作都进行数据库连接操作呢?
其实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给我们提供的分析工具真得很轻松就可以让我们了解到程序代码状况,从而优化程序的代码。如果有这烦脑的朋友不防试下:)
相关文章推荐
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
- 通过VS2010性能分析来查找代码中那些地方最损耗资源 [转]
- 通过 VS2010性能分析来查找代码中那些地方最耗资源
- 通过VS2010的内存分析工具来分析程序性能问题
- smark 通过VS2010的内存分析工具来分析程序性能问题
- 通过Jstack分析CPU占用的线程查找到对应的线程代码
- 通过VS2010的内存分析工具来分析程序性能问题
- .NET Visual Studio 代码性能分析工具
- 通过字符串构建查找图片资源ID,并取得Drawable对象
- iotop 分析系统那些进程占用io资源
- 实例分析之用ASP编程实现网络内容快速查找的代码
- [Spark性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 如何通过dba_hist_active_sess_history分析历史数据库性能问题
- IOS 通过 代码 自定义cell(Cell的高度不一致)(优化性能)
- 主要通过你的行为看你的编程能力,除了让你做算法题外,更重要的是你实际写过的代码和项目,效率如何?有没有考虑过异常处理?实际的访问性能如何?有没有开过自己的 github 项目,或者是给知名项目贡献过源