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

  • 假设现在写了一个组件,很想知道组件和代码的性能情况。这个可以简单地写一个测试程序。
    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. MiniProfiler性能分析工具— .Net Core中用法

    前言: 在日常开发中,应用程序的性能是我们需要关注的一个重点问题.当然我们有很多工具来分析程序性能:如:Zipkin等:但这些过于复杂,需要单独搭建. MiniProfiler就是一款简单,但功能强大 ...

  2. android studio 中查找代码中的硬编码

    在Android Studio中同时按下Ctrl + Shift+ F  或者其他自定义的快捷键,打开全局搜索,在全局搜索中输入 ^((?!(\*|//)).)+[\u4e00-\u9fa5] 并打勾 ...

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

    //性能优化 console.time("timer"); for(var i=0;i<10000;i++){} console.timeEnd("timer&qu ...

  4. Python:用pyinstrument做性能分析

    导引 在计算密集型计算或一些Web应用中,我们常常需要对代码做性能分析.在Python中,最原始的方法即是使用time包中的time函数(该函数以秒为计时单位): from time import s ...

  5. Java application 性能分析分享

    性能分析的主要方式 监视:监视是一种用来查看应用程序运行时行为的一般方法.通常会有多个视图(View)分别实时地显示 CPU 使用情况.内存使用情况.线程状态以及其他一些有用的信息,以便用户能很快地发 ...

  6. 如何在自定义Filter中优雅的实现静态资源放行

            在javaweb开发中,过滤器Filter比较常用于类似登录的拦截等场景.但是,当过滤器的配置不当时就会把所有的请求都拦截,静态资源也会被拦截掉,导致静态页面加载不出来. 一般的解决方 ...

  7. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  8. Graphic32中TBitmap32.TextOut性能分析[转载]

    转载:http://blog.csdn.net/avan_lau/article/details/6958497 最近在分析软件中画线效率问题,发现在画一些标志性符号的方法,存在瓶颈,占用较大的时间. ...

  9. .NET 11 个 Visual Studio 代码性能分析工具

    原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...

随机推荐

  1. WIN10下解决Failed installing tomcat X service

    Win10下无法安装Tomcat的service.bat 来看本文的网友想必已经在自己电脑的cmd看了几百遍的Failed installing tomcat X service 字样,也认真检查过自 ...

  2. selenium webdriver 移动到某个位置,滚动到某个位置

    https://blog.csdn.net/xiaosongbk/article/details/70231564

  3. java 基础面试

    1. &和&&的区别 答: &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 2.int 和 Integer 有什么区别 答: Ja ...

  4. list推导式,dict推导式,set推导式

    生成一个1-14的列表 1.1 普通for循环 # lst = [] # for i in range(1,15): # lst.append(i) # print(lst) # # 结果: # [1 ...

  5. 【PHP项目】$_SEVER详解

    $_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言 $_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] ...

  6. uniqueidentifier数据类型转换

    cast(id as varchar(36))

  7. [洛谷1156]垃圾陷阱(DP)

    [Luogu1156] f[i]表示高度为i时的存活时间 Code #include <cstdio> #include <algorithm> #define N 110 u ...

  8. Android 拍照或相册选择照片进行显示缩放位图 Demo

    拍照后直接使用 BitmapFactory.decodeStream(...) 进行创建 Bitmap 并显示是有问题的. Bitmap 是个简单对象,它只存储实际像素数据,也就是说,即使原始照片已压 ...

  9. 20145202马超 《Java程序设计》第三周学习总结

    ************************http://git.oschina.net/tuolemi/java这是git的那个网址********************* 函数的重载:在同一 ...

  10. python字典的整理信息

    字典的增删改查大纲 增: dic={'age':18,'name':'liu','sex':'male'} dic['high'] = 185 #没有键值对,添加 dic['age'] = 16 #有 ...