.net好好地利用Conditional属性
Conditional是.net提供关于编译的属性描述,其作用是添加到方法或属上,通过定义编译符的方式告指示编译器应忽略方法调用或属性.在.NET中Debug 和 Trace 类中的方法都添加了这属性的定义,主要用于方便在编译的时候可以选择性编译相关调式和跟踪代码。那我们平时在写一个记录跟踪相关功能库的时候,是否有考虑过这东西呢?
StopWatchExtend swe = new StopWatchExtend("test");
swe.Start("test");
Console.WriteLine("test");
swe.Start("test1");
Console.WriteLine("test1");
swe.End();
对于以上代码相信很多人不会陌生的,其实就是计算这个过程每块代码所损耗的时间。但问题在于很多时候只希望在debug下才做这样的操作,在release则是完全没有必要的。那这个时候我们一般想到的是使用预编译符。
#if DEBUG
StopWatchExtend swe = new StopWatchExtend("test");
swe.Start("test");
#endif
Console.WriteLine("test");
#if DEBUG
swe.Start("test1");
#endif
Console.WriteLine("test1");
#if DEBUG
swe.End();
#endif
这样的代码的确是让人蛋痛的事情,当然也可以选择在发布编译的时候注释到相关代码。显然这两种做法都是比较让人捉狂的……这个时候就可以通过Conditional来解决以上问题。只需要在StopWatchExtend方法添加相关Conditional即可。
[Conditional("DEBUG")]
public void End()
{
if (mCurrentItem != null)
{
mStopWatch.Stop();
mCurrentItem.UseTime = mStopWatch.Elapsed.TotalMilliseconds;
mItems.Add(mCurrentItem);
mCurrentItem = null;
}
}
[Conditional("DEBUG")]
public void Start(string name)
{
if (mCurrentItem != null)
{
mStopWatch.Stop();
mCurrentItem.UseTime = mStopWatch.Elapsed.TotalMilliseconds;
mItems.Add(mCurrentItem);
mCurrentItem = null;
}
mCurrentItem = new WatchItem(name, 0);
mStopWatch.Reset();
mStopWatch.Start();
}
[Conditional("DEBUG")]
public void Start(string format, params object[] datas)
{
Start(string.Format(format, datas));
}
通过添加以上属性后,那编写前面的计时代码在发布的时候就会省上很多事情,只需要在编译项目里把DEBUG移走,那StopWatchExtend的End和Start方法都不会被编译过去.
有DEBUG生成的代码
StopWatchExtend swe = new StopWatchExtend("test");
swe.Start("test");
Console.WriteLine("test");
swe.Start("test1");
Console.WriteLine("test1");
swe.End();
没有DEBUG生成的代码
StopWatchExtend swe = new StopWatchExtend("test");
Console.WriteLine("test");
Console.WriteLine("test1");
.net好好地利用Conditional属性的更多相关文章
- C# 中利用 Conditional 定义条件方法
利用 Conditional 属性,程序员可以定义条件方法.Conditional 属性通过测试条件编译符号来确定适用的条件.当运行到一个条件方法调用时,是否执行该调用,要根据出现该调用时是否已定义了 ...
- winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)
上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的 ...
- Flex利用titleIcon属性给Panel容器标题部添加一个ICON图标
Flex利用titleIcon属性,给Panel容器标题部添加一个ICON图标. 让我们先来看一下Demo(可以右键View Source或点击这里察看源代码): 下面是完整代码(或点击这里察看): ...
- 利用column-width属性设置多栏布局
css样式设置为: div{ background:blanchedalmond; margin:0 auto; width:1230px; -moz-column-width:400px; -web ...
- bootstrap学习之利用CSS属性pointer-events禁用表单控件
参考链接: CSS3 pointer-events:none应用举例及扩展 首先pointer-events在除去SVG中的应用只有两个值:AUTO | NONE pointer-events:non ...
- 利用referer属性,记录百度搜索跳转参数
从百度搜索结果跳转到指定链接前,百度会发送一些参数,可以利用referer属性,在本站访问时记录百度跳转来之前的一些参数. 利用百度跳转前参数,进行一些相关的seo优化. 目前所用到的一些参数说明如下 ...
- [Flex] 组件Tree系列 —— 利用firstVisibleItem属性,设置或取得第一个显示节点
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述: 利用firstVisibleIt ...
- CSS3利用text-shadow属性实现多种效果的文字样式展现
一.效过图展示: 已经是比较久之前学习的文字效果了.但是还是很实用很有趣的.利用CSS3提供的text-shadow属性可以给页面上的文字添加阴影效果,因此可以替换掉之前使用过的一些繁琐的图片.到目前 ...
- 利用performance属性查看网页性能
一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时.而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒. pe ...
随机推荐
- Desert King POJ - 2728(最优比率生产树/(二分+生成树))
David the Great has just become the king of a desert country. To win the respect of his people, he d ...
- BZOJ.5305.[HAOI2018]苹果树(组合 计数)
LOJ BZOJ 洛谷 BZOJ上除了0ms的Rank1啦.明明这题常数很好优化的. 首先,\(n=1\)时有\(2\)个位置放叶子,\(n=2\)时有\(3\)个... 可知\(n\)个点的有标号二 ...
- js与es6中获取时间戳
在项目中经常会用到求时间戳的问题,下面是已经封装好的函数,直接使用就可以.1.js常用获取时间戳的方法 // 获取时间戳 var start = new Date().getTime(); conso ...
- 软件工程第三周的学习报告 html<input> final finally finalize 的比较 BigInteger
三月十三号下午: html的<input>的三个属性pattern(限定用户的输入格式)与placeholder(显示的)与required(不能为空) 代码案例: pattern与pla ...
- 五、JAVA反射、线程
第五节:Java反射.线程 线程 1.进程:进程是程序的基本执行实体,进程是线程的容器. 线程:被称为轻量进程,是程序执行流的最小单元.线程是进程中的一个实 ...
- Oracle (分类、数据库类型、序列)
分类: 1.DDL (定义语句) create .alter .drop 不需要commit create table aaa( tt1 varchart ) 2. DML (操纵语句) lnset ...
- vue中计算属性computed方法内传参
vue中computed计算属性无法直接进行传参 如果有传参数的需求比如说做数据筛选功能可以使用闭包函数(也叫匿名函数)实现 例如: 在上篇博客vue安装使用最后的成绩表练习中的过滤功能的实现: &l ...
- Centos7 编译测试工具 wrk bombardier iftop
1.wrk 安装及使用----------------------------------------------------------------------------------------- ...
- oracle的知识点总结
体系结构:数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制.体系结构包括:实例(instence),数据库文件(database),用户进程(user proces ...
- Python函数式编程之lambda表达式
一:匿名函数的定义 lambda parameter_list: expression 二:三元表达式 条件为真时返回的结果 if 条件判断 else 条件为假的时候返回的结果 三:map map(f ...