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属性的更多相关文章

  1. C# 中利用 Conditional 定义条件方法

    利用 Conditional 属性,程序员可以定义条件方法.Conditional 属性通过测试条件编译符号来确定适用的条件.当运行到一个条件方法调用时,是否执行该调用,要根据出现该调用时是否已定义了 ...

  2. winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)

    上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的 ...

  3. Flex利用titleIcon属性给Panel容器标题部添加一个ICON图标

    Flex利用titleIcon属性,给Panel容器标题部添加一个ICON图标. 让我们先来看一下Demo(可以右键View Source或点击这里察看源代码): 下面是完整代码(或点击这里察看): ...

  4. 利用column-width属性设置多栏布局

    css样式设置为: div{ background:blanchedalmond; margin:0 auto; width:1230px; -moz-column-width:400px; -web ...

  5. bootstrap学习之利用CSS属性pointer-events禁用表单控件

    参考链接: CSS3 pointer-events:none应用举例及扩展 首先pointer-events在除去SVG中的应用只有两个值:AUTO | NONE pointer-events:non ...

  6. 利用referer属性,记录百度搜索跳转参数

    从百度搜索结果跳转到指定链接前,百度会发送一些参数,可以利用referer属性,在本站访问时记录百度跳转来之前的一些参数. 利用百度跳转前参数,进行一些相关的seo优化. 目前所用到的一些参数说明如下 ...

  7. [Flex] 组件Tree系列 —— 利用firstVisibleItem属性,设置或取得第一个显示节点

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述: 利用firstVisibleIt ...

  8. CSS3利用text-shadow属性实现多种效果的文字样式展现

    一.效过图展示: 已经是比较久之前学习的文字效果了.但是还是很实用很有趣的.利用CSS3提供的text-shadow属性可以给页面上的文字添加阴影效果,因此可以替换掉之前使用过的一些繁琐的图片.到目前 ...

  9. 利用performance属性查看网页性能

    一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时.而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒. pe ...

随机推荐

  1. 多版本python安装TensorFlow出现的各种事故

    TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数 ...

  2. StackExchange.Redis超时的问题

    最近公司有个项目,在请求量大的情况下,有大量的错误日志是关于redis超时的问题: Timeout performing SET XXX, inst: 27, mgr: ProcessReadQueu ...

  3. SQL功能分类

    DDL  数据定义语言:创建表 ,库,列 DML 数据操作语言:用来操作数据库中的记录 DQL 数据查询语言 :用来查询数据 DCL 数据控制语言:定义访问权限和安全级别 —————————————— ...

  4. Python PE8 编程规范

    1.使用四个空格而不是tab进行缩进 2.默认使用utf-8编码 3.尽量不要使用魔术方法 4.类中使用self作为默认参数 5.命名时,尽量使用驼峰式或单词+下划线,要保证见名知意 6.操作符和逗号 ...

  5. docker安装,无法正常启动

    报错信息: Job for docker.service failed because the control process exited with error code. See "sy ...

  6. 【尺取法】Jurisdiction Disenchantment

    [尺取法]Jurisdiction Disenchantment PROBLEM 时间限制: 1 Sec 内存限制: 128 MB 题目描述 The Super League of Paragons ...

  7. CommonsChunkPlugin

    CommonsChunk 插件的作用就是提取代码中的公共代码,然后将公共模块打包到一个独立的文件中,以便在其它的入口和模块中使用,原理就是把多个入口共同的依赖都给定义成一个新入口 多种打包情况: 单一 ...

  8. VS2017中的nuget还原失败或超时的解决方案

    把nuget源地址修改为

  9. Python3定时短信获得天气

    getWeather 脚本链接:https://github.com/Mrlshadows/getWeather Python环境为 python3 两个API 注册后即可使用免费版本的服务 心知天气 ...

  10. Fence Repair POJ - 3253 (贪心)

    Farmer John wants to repair a small length of the fence around the pasture. He measures the fence an ...