在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好。很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题。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性能分析来查找代码中那些地方最损耗资源相关推荐

  1. 使用.NET 5自动查找代码中的潜在错误

    目录 介绍 分析级别5中出现的所有新警告和错误 常见错误警告 当表达式始终为真或假时发出警告 不允许as或is在静态类型 不允许对非引用类型进行锁定 重新抛出以保留堆栈详细信息 不要将Referenc ...

  2. android studio教程离线安装findbugsieda报错,使用 FindBugs-IDEA 插件查找代码中潜在的 BUG...

    在Android自动化测试技术中,我们首先会运用各种代码检查工具对Android代码进行检查,从而提前发现代码中存在的一些bug和隐患,提高代码质量.FindBug就是Android代码检查最常用的工 ...

  3. WPF 如何在代码中使用自定义的鼠标资源

    如果想要在XAML中使用自定义鼠标很容易,直接在标签中设定 Cursor="/asserts/hand.ani" 即可, 但是如果在代码中使用需要 this.Cursor = ne ...

  4. 算法性能分析(6):代码的内存消耗

    理解代码的内存消耗,最关键是要知道自己所用编程语言的内存管理. 一.不同语言的内存管理 不同的编程语言各自的内存管理方式. C/C++这种内存堆空间的申请和释放完全靠自己管理 Java 依赖JVM来做 ...

  5. 简要分析JM8.6代码中foreman_part_qcif.yuv文件的YUV数据如何悄无声息地进入程序

    分析encode_one_frame函数. 先来看下结构体Sourceframe的定义: typedef struct {// Size infoint x_size, y_framesize, y_ ...

  6. JS性能分析(测试代码运行时间)

    console.time("timer"); for(var i=0;i<10000;i++){} console.timeEnd("timer"); t ...

  7. 距离度量对传统萤火虫算法开发特性和收敛行为的性能分析(Matlab代码实现)

  8. python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。...

    很多人做性能测试,吧print打开,吧log调到debug级别并使用了streamhandler,那就会疯狂打印到控制台. 打印控制台会影响代码性能吗?这是毫无疑问的,python print会严重影 ...

  9. The missing semester of your CS education--调试及性能分析

    课程结构 01.课程概览与 shell 02.Shell 工具和脚本 03.编辑器 (Vim) 04.数据整理 05.命令行环境 06.版本控制(Git) 07.调试及性能分析 08.元编程 09.安 ...

最新文章

  1. bootstrap:按钮,下拉菜单
  2. 想学python看什么书-我以前从没学过编程,学Python看什么书?
  3. c 语言 结构体的引用
  4. a extends b java_(class B extends A) 怎么解释?A是上一个类名
  5. 计算机无法开机按了f2,Win7系统开机需要按F2怎么解决?
  6. Angular ctorParameters,decorator等元数据,包含在ActivatedRouteSnapshot数据结构里
  7. netcore开发windows普通服务(非Web)并一键发布到服务器
  8. screen,client,page三种确定鼠标坐标的区别和原生JS事件写法,区别于Jquery的$.on(x,y);和$.click()...
  9. 服务器硬件工程师从入门到精通_硬件工程师必阅--如何“0基础”从入门到精通?(附CAD使用指南)...
  10. ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序
  11. DotSpatial入门
  12. 互斥事件的概念和公式_相互独立事件与互斥事件的区别
  13. JVAV - 对接支付宝- 下载对账单接口
  14. 深度学习课后week2 编程(识别猫)
  15. 【Linux】swp文件
  16. 1分钟学会系统安装方法,win7 XP win10 win11都变得非常简单
  17. 读《混世小农民》有感
  18. Oracle WebLogic Server 12c: Node Manager配置与使用
  19. 编程求解丢番图方程的原理
  20. 最近五年中秋节后第一天涨幅前十个股在此 沪深三七开 更多规律你来找

热门文章

  1. 检测商品简码是否唯一,不重复
  2. 遇到的bug及解决方法,持续更新
  3. python提前退出内层循环,python with提前退出遇到的坑与解决方案
  4. java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...
  5. python超时处理_Python如何实现让一个函数超时退出?
  6. mysql -e 导出_mysql 导出数据导入数据
  7. 获取滑动条高度_HexMap学习笔记(三)——海拔高度与阶梯连接
  8. php 图片保存到本地文件,php 远程图片保存到本地的函数类
  9. 奶粉中的php是什么,婴儿配方奶粉的分类及用途
  10. mysql connector net 6.9.5_mysql connector/net6.9.5 下载 - 51下载网