有很多时候我们需要对代码不同段计算一个执行时间,并希望通过节点树的方式表达现每段代码的执行时长。在.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. MySQL 如何使用左链接代替 NOT IN

    核心思想 通过左链接 查询出要排除的数据 然后和主表进行匹配 拿去未匹配到的数据 可以使用 IS NULL 来过滤掉 案例稍后 更新 select * from a left join on a.id ...

  2. less是什么?直接用css好还是less好

    问:Less是一个动态CSS语言框架,Less扩展了CSS的动态特性 [1]:从实现角度来说,直接用css看起来能方便一些,而less还要编译? [2]:技术上好像灵活,但是从使用者的角度来说,css ...

  3. thrift小试--C++

    [转自]http://blog.csdn.net/poechant/article/details/6618284# Thrift可以实现C++.Java.Python等多种语言的自动生成,此处以C+ ...

  4. BZOJ3497 : Pa2009 Circular Game

    令先手为$A$,后手为$B$,将相邻同色棋子合并成块,首先特判一些情况: 如果所有格子都是满的,那么显然$A$必败. 否则如果所有块都只有一个棋子,那么显然平局. 枚举$A$的第一步操作,如果可以使得 ...

  5. vs中 VMDebugger未能加载导致异常

    ,纠结了许久的一个问题,终于找到了解决 vs中 VMDebugger未能加载导致异常 错误号:80004005 搜了好多,没有一个给出完美的答案.   解决办法:工具->导入和导出设置,重置一下 ...

  6. emoji 表情: MySQL如何支持 emoji 表情

    https://www.cnblogs.com/jentary/p/6655471.html 修改数据库字符集: ALTER DATABASE database_name CHARACTER SET ...

  7. Java_Math/Date

    这篇文章我们来研究下java中两个常用的工具类,Math和Date Math: Math是java中各种函数计算集合类,进入到Math类中,可以看到Math是java.lang包下的,被final修饰 ...

  8. Keepalived+Nginx实现高可用Web负载均衡

    1.安装编译 Nginx 所需的依赖包# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zli ...

  9. 为bootstrap+angularJs打造的表格代码生成器

    private void btnCreateCode_Click(object sender, EventArgs e) { string objName = txtObjName.Text; if ...

  10. koa2学习(二) 中间件router

    中间件 koa-router 安装 npm install --save koa-router 使用 const Koa = require('koa'); const Router = requir ...