.NET代码树执行时间计时器
有很多时候我们需要对代码不同段计算一个执行时间,并希望通过节点树的方式表达现每段代码的执行时长。在.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编译符,那更深层次执行时间树会表现出来。
.NET代码树执行时间计时器的更多相关文章
- cscope无法索引代码树之外的软链接
http://blog.csdn.net/sudolee/article/details/9052291 背景:为什么非要使用cscope?不用ctags? 尽管ctags可以索引软链接,但是,cta ...
- 推荐一款超实用的GitHub可视化代码树插件:Octotree
前言 大家在GitHub查看代码的时候,是不是会经常跳转搜索代码!过一段时间就不知道自己跑到哪里了!有了这款工具,妈妈再也不用担心我找不到代码位置了! 直接上效果图 插件名称 : octotree 作 ...
- Javascript的调试利器:Firebug使用详解
转载自:http://blog.csdn.net/tianxiaode/archive/2007/09/02/1769152.aspx 一直在用firebug,可是没有这么精通,今天看到本文章觉得 ...
- Linux 集群
html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...
- 《Linux内核设计与实现》读书笔记 第二章 从内核出发
一.获取内核源码 1. Git git实际上是一种开源的分布式版本控制工具. Linux作为一个开源的内核,其源代码也可以用git下载和管理 - 获取最新提交到版本树的一个副本 - $ git clo ...
- 《linux内核设计与实现》读书笔记第一、二章
第一章 Linux内核简介 1.1 Unix的历史 1971年,Unix被移植到PDP-11型机中. 1973年,Unix操作系统用C语言改写——为Unix系统的广泛移植铺平了道路. 1977年,伯克 ...
- 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼
1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...
- linux CPU动态调频【转】
转自:https://www.xuebuyuan.com/2185926.html 针对sep4020的linux低功耗研究也有一段时间了,基本把低功耗的实现方式想清楚了(主要分成机制和策略),这段时 ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
随机推荐
- Linux网络文件系统的实现与调试
NFS协议 NFS (网络文件系统)不是传统意义上的文件系统,而是访问远程文件系统的网络协议.整个NFS服务的TCP/IP协议栈如下图所示,NFS是应用层协议,表示层是XDR,会话层是RPC,传输层同 ...
- BZOJ1386 : [Baltic2000]Stickers
显然每一位的限制独立,对于每一位求出仅限制该位下的最大数,然后求最小值即可. 假设当前要求数字$d$的答案: 考虑填数字的过程,可以看作依次考虑一个序列中的每个数,当前缀和$<0$时退出. 设$ ...
- linux查看分区是否开启acl权限
1.为什么需要ACL权限 ACL的全称是 Access Control List (访问控制列表) .对于文件或者目录,都有相应的操作权限 r(read 读),w(write 写),x(execute ...
- mpvue-docs基于vue来开发微信小程序
http://mpvue.com/和https://tencent.github.io/wepy/
- window上杀死node进程
1.查询端口占用的进程ID点击"开始"-->"运行",输入"cmd"后点击确定按钮,进入DOS窗口,接下来分别运行以下命令:netst ...
- Html元素添加事件禁用
最近几天,测试在检测我页面功能时,疯狂点击带接口请求的按钮,然后就会发起无数次请求,然后app就卡住了.当看到这个问题的时候,心里疯狂鄙视测试(开个玩笑),一开始想的到解决方案是用函数防抖,使用函数防 ...
- phpstorm 断点调试 傻瓜教程
前言: 简单介绍下为什么要用断点调试,很多人说我在代码调试的部位用var_dump 或者 exit 或者print_r来进行断点,但是当项目足够大的时候这样的做法就比较费时费力,因为你断点后需要删除原 ...
- 判断以xx开头的字符串
public static void main(String[] args) { String str = "EAN_13,1534651"; String strHttp = & ...
- 算法与数据结构(五) 普利姆与克鲁斯卡尔的最小生成树(Swift版)
上篇博客我们聊了图的物理存储结构邻接矩阵和邻接链表,然后在此基础上给出了图的深度优先搜索和广度优先搜索.本篇博客就在上一篇博客的基础上进行延伸,也是关于图的.今天博客中主要介绍两种算法,都是关于最小生 ...
- Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据
模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...