有很多时候我们需要对代码不同段计算一个执行时间,并希望通过节点树的方式表达现每段代码的执行时长。在.Net下似乎找不到这样一个功能类,所以花了一些时间实现这样一个代码运行计时器。首先看一下简单的需求。

功能代码

JoinTable table = Order.employeeID.InnerJoin(Employee.employeeID)
.InnerJoin(Order.customerID, Customer.customerID)
.Select(Order.orderID.At(), Customer.companyName, Employee.firstName, Employee.lastName);
IList<OrderView> orders = new Expression().List<OrderView>(table);

以上代码是简单地构建一个关联查询表,然后根据这个关联表执行一个简单的订单查询。

加入计时跟踪

现在需要针对以上代码添加一个执行时间跟踪,主要包括总体执行时间,构建查询表的时间和查询的时间。那只需要添加以下代码即可达到跟踪效果。

            TimeWatch.________________________________________________________("list order");
TimeWatch.________________________________________________________("create table");
JoinTable table = Order.employeeID.InnerJoin(Employee.employeeID)
.InnerJoin(Order.customerID, Customer.customerID)
.Select(Order.orderID.At(), Customer.companyName, Employee.firstName, Employee.lastName);
TimeWatch.________________________________________________________();
TimeWatch.________________________________________________________("List");
IList<OrderView> orders = new Expression().List<OrderView>(table);
TimeWatch.________________________________________________________();
TimeWatch.________________________________________________________();

计时结果

TimeWatch.Report(o => { Console.WriteLine(o.ToString()); });

通过以上代码就可以把每段执行时间通过树的方式展现出来。

取消和启用跟踪

由于添加了相关跟踪代码,所以使用上就会让人担心这些代码添加了会不会影响代码的总体性能,计时器在实现这些方法的过程中添加了Conditional特性,所以当发布代码的时候把DEBUG的编译符不选上那相关的跟踪代码都不会被编译;因此在编写这些跟踪的时候完全是不用担心对发布的代码产生影响。

更完整的结果

如果下层的组件添加了相关代码,那只要在编译的时候启用DEBUG编译符,那更深层次执行时间树会表现出来。

下载:IKende.com.core.rar

.NET代码树执行时间计时器的更多相关文章

  1. cscope无法索引代码树之外的软链接

    http://blog.csdn.net/sudolee/article/details/9052291 背景:为什么非要使用cscope?不用ctags? 尽管ctags可以索引软链接,但是,cta ...

  2. 推荐一款超实用的GitHub可视化代码树插件:Octotree

    前言 大家在GitHub查看代码的时候,是不是会经常跳转搜索代码!过一段时间就不知道自己跑到哪里了!有了这款工具,妈妈再也不用担心我找不到代码位置了! 直接上效果图 插件名称 : octotree 作 ...

  3. Javascript的调试利器:Firebug使用详解

    转载自:http://blog.csdn.net/tianxiaode/archive/2007/09/02/1769152.aspx   一直在用firebug,可是没有这么精通,今天看到本文章觉得 ...

  4. Linux 集群

    html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...

  5. 《Linux内核设计与实现》读书笔记 第二章 从内核出发

    一.获取内核源码 1. Git git实际上是一种开源的分布式版本控制工具. Linux作为一个开源的内核,其源代码也可以用git下载和管理 - 获取最新提交到版本树的一个副本 - $ git clo ...

  6. 《linux内核设计与实现》读书笔记第一、二章

    第一章 Linux内核简介 1.1 Unix的历史 1971年,Unix被移植到PDP-11型机中. 1973年,Unix操作系统用C语言改写——为Unix系统的广泛移植铺平了道路. 1977年,伯克 ...

  7. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  8. linux CPU动态调频【转】

    转自:https://www.xuebuyuan.com/2185926.html 针对sep4020的linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时 ...

  9. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

随机推荐

  1. SQL 收缩日志

    USE [master]ALTER DATABASE RcBalance SET RECOVERY SIMPLE WITH NO_WAITALTER DATABASE RcBalance SET RE ...

  2. iOS开发只简单动画实现

    1.动画旋转: [UIViewbeginAnimations:@"View Flip"context:nil]; //声明,@"XX"为标题, [UIViews ...

  3. webpack4 打包报错 :regeneratorRuntime is not defined

    使用async函数,在webpack打包时报错 babel-polyfill is required. You must also install it in order to get async/a ...

  4. go语言数据库操作,xorm框架

    待续............................................... 连接数据库 db, err := xorm.NewEngine("mysql", ...

  5. JUC

    1.Java JUC简介 在Java5.0提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池.异 ...

  6. 201771010126 王燕《面向对象程序设计(java)》第十一周学习总结

    实验十一   集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: Vector类实现了长度可变的数组. Vecto ...

  7. 发现一款适合php网站的管理软件——kodexplorer,能取代ftp

    今天偶然看到可以利用可道云来管理网站的文件.可道云不需要数据库,因此搭建非常简单.搭建的方法也很简单.传统的 WordPress 站点的文件管理,通常是是通过 FTP 或者服务器面板自带的文件管理器来 ...

  8. 做个流量站-聚茶吧, 汇聚"茶"的地方

    犹豫了好久,终于下定决心,做一回个人站长了,虽然没啥经验,但毕竟也是IT科班出身了,准备用一年的事件摸索一下内容站和SEO,看看能否积累点经验,赚点小钱. 推酷-靠爬虫起家的内容站 做内容站,站长们都 ...

  9. maven <include>与<exclude>划定的范围存在冲突,则以<exclude>配置为准。

    maven 与划定的范围存在冲突,则以配置为准.

  10. HTML块元素,行内元素,类,头部元素

    总结HTML块元素,行内元素,类,头部元素 块元素: 在HTML中,块级元素的高度为其内容的高度,宽度会扩展到与父容器同宽.默认情况下,块级元素会独占一行,并且元素前后行留空. 示例:<h1&g ...