博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过VS2010性能分析来查找代码中那些地方最损耗资源
阅读量:6200 次
发布时间:2019-06-21

本文共 2349 字,大约阅读时间需要 7 分钟。

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

  • 假设现在写了一个组件,很想知道组件和代码的性能情况。这个可以简单地写一个测试程序。
ContractedBlock.gif
ExpandedBlockStart.gif
View Code
class Program     {
static List
mExpressions = new List
(); static Random mRan = new Random(); static void Main(string[] args) {
try {
string dbpath = @"Data Source=d:\\northwind.db;Pooling=true;FailIfMissing=false;"; DBContext.SetConnectionDriver
(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
()); System.Threading.Thread.Sleep(mRan.Next(50, 5000)); } } }
  • 测试程序写好后可以通过VS2010分析菜单里选择启用性能向导

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

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

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

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

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

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

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

 

 

 

转载地址:http://jhtca.baihongyu.com/

你可能感兴趣的文章
Java 8 forEach简单例子
查看>>
Entity Framework Core 2.1,添加种子数据
查看>>
JAVA实现长连接(含心跳检测)Demo
查看>>
记录一则expdp任务异常处理案例
查看>>
[转]Illuminate Database
查看>>
echarts的地图点击事件
查看>>
C# 在PPT中绘制形状(shape)
查看>>
初探APT攻击
查看>>
Spring的Task任务
查看>>
ClassLoader家族
查看>>
C# 多线程九之Timer类
查看>>
spring注解@Scheduled中fixedDelay、fixedRate和cron表达式的区别
查看>>
centos 修改主机名
查看>>
Java访问子类对象的实例变量
查看>>
About Realtime Radiosity
查看>>
Tips on GORM, Avoid Error about "duplicate column name: id"
查看>>
[CF.Skills]防止Smartphone进入休眠状态
查看>>
CGI编程学习3 加法计算
查看>>
MVC文章汇总
查看>>
郁闷的一次调优
查看>>