C#开发笔记之03-为什么选择IsNotXXX方法而不是IsXXX方法?
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/959 访问。
为什么有时候要选择IsNotXXX方法而不是IsXXX方法呢?答案是效率。请看以下代码:
public abstract class DataSource {
public void ShowChart() {
if (IsNotJson()) {
Convert2Json();
}
}
}
以上代码可在我的 C#设计模式 系列博文中行为型模式下的模板方法模式中找到。
我们的需求是根据数据源的格式进行判断,如果数据源不是Json格式,那么我们需要转换成Json格式,如果数据源本身就是Json格式,那么我们什么也不要做,于是我们有了上面代码中的一个片段,如下所示:
if (IsNotJson()) {
Convert2Json();
}
可以看到我们选择了IsNotJson方法而不是IsJson方法,原因是什么呢?我们先来看看如果我们选择IsJson方法,代码会是什么样子。
if (IsJson()) {
}
else{
Convert2Json();
}
或者
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/959 访问。
if (!IsJson()) {
Convert2Json();
}
在第1个代码片段中,运行时在运行至IsJson方法时,如果是Json那么什么也不做,如果不是,则要跳转至else语句,无缘无故增加了JIT的负担。第2个代码片段也是一样,每次都要进行一次非(!)运算,这在一个大型的、高并发的Web应用程序中是绝对不允许的。因为它在没有带来任何好处的情况下却给系统带来了额外的计算负担。
C#开发笔记之03-为什么选择IsNotXXX方法而不是IsXXX方法?的更多相关文章
- java中多线程执行时,为何调用的是start()方法而不是run()方法
Thead类中start()方法和run()方法的区别 1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状 ...
- ajax 执行成功以后返回的数据走的是error方法而不是success方法的问题
今天在一个功能的时候发现写的ajax的方法执行后台代码成功后返回前台时执行的是error方法而不是success方法,代码如下 jQuery('#form').ajaxSubmit({ type: & ...
- Java开发笔记(六十三)双冒号标记的方法引用
前面介绍了如何自己定义函数式接口,本文接续函数式接口的实现原理,阐述它在数组处理中的实际应用.数组工具Arrays提供了sort方法用于数组元素排序,可是并未提供更丰富的数组加工操作,比如从某个字符串 ...
- Java开发笔记(八十)利用反射技术操作私有方法
前面介绍了如何利用反射技术读写私有属性,不单是私有属性,就连私有方法也能通过反射技术来调用.为了演示反射的逆天功能,首先给Chicken鸡类增加下列几个私有方法,简单起见弄来了set***/get** ...
- Java 多线程启动为什么调用 start() 方法而不是 run() 方法?
多线程在工作中多多少少会用到,我们知道启动多线程调用的是 start() 方法,而不是 run() 方法,你知道原因吗? 在探讨这个问题之前,我们先来了解一些多线程的基础知识~ 线程的状态 Java ...
- [开发笔记]-使用jquery获取url及url参数的方法
使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javasc ...
- javascript常用开发笔记:一个简单强大的js日期格式化方法
前言:一直没找到好用的javascript日期格式化工具,自己写了一个,方便以后复用 1.主要功能 (1)支持任意顺序的日期格式排列:yyyy=年,MM=月,dd=日,HH=时,mm=分,ss=秒,s ...
- 黑马学习AJAX jQuery发送异步请求 $.ajax() $.post() $.get()是在调用方法而不是定义方法
- C#开发笔记,点点细微,处处真情,记录开发中的难言之隐
该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/956 访问. 概述 本系列文章将会向大家介绍本人实际开发过程中所遇到技术 ...
随机推荐
- P1136 迎接仪式 题解
题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出"欢迎欢迎欢迎欢 ...
- oracle数据库备份还原命令
oracle数据库备份命令exp 用户名/密码@orcl file=d:\xxxxxx.dmp owner=用户名 oracle数据库还原命令sqlplus conn / as sysdba drop ...
- 小白从零开始阿里云部署react项目+node服务接口(二:node服务+web)
我们用极简的方式来创建服务,没有任何附加功能 1 新建一个server文件夹 2 使用npm init 或者yarn init 一路enter 3 yarn add express cors ...
- JavaScript动画实例:沿五角星形线摆动的小圆
五角星形线的笛卡尔坐标方程式可设为: r=10+(3*sin(θ*2.5))^2 x=r*cos(θ) y=r*sin(θ) (0≤θ≤2π) 根据这个曲线方程,在[0,2 ...
- javascript兼容性:展开运算符 ... 的降级
展开运算符 ... 是一个很好用的ES6新特性,用的好的话,可以节约很多代码. 但是作为ES6特性,它有兼容性问题,而且Babal(在线转码网页)并不会转换展开运算符. 展开运算符大体分为两种用法:展 ...
- python多进程之multiprocessing
什么是多进程? 简单的理解:单板上运行的一个程序就是一个进程.进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式.python提供了自带的multiprocess ...
- webview访问URL
// // Do any additional setup after loading the view. // //创建WKWebView // WKWebView *web = ...
- Lua学习入门(基本数据类型)
数据类型 Lua 中有 8 个基本类型分别为:nil.boolean.number.string.userdata.function.thread 和 table. 数据类型 描述 nil 这个最简单 ...
- 线程_threading合集
# 主线程等待所有子线程结束才结束 import threading from time import sleep,ctime def sing(): for i in range(3): print ...
- 自制廉价的LED+LCD型投影仪
文档标识符:PROJECTOR_T-D-P6 作者:DLHC 最后修改日期:2020.7.30 本文链接:https://www.cnblogs.com/DLHC-TECH/p/PROJECTOR_T ...