C#小性能知识
字符串比较
- string s = "";
- 1) if(s == ""){}
- 2) if(s == string.Empty){}
- 3) if (string.IsNullOrEmpty(s)) { }
- 4) if(s != null && s.Length ==0) {}
- 5) if((s+"").Length == 0){}
1,2最慢 3较快 4,5最快
1,2几乎没区别 4,5几乎没区别
不过这个只适用于比较null和空字符串,如果是连续的空白就是string.IsNullOrWhiteSpace最快了,不过这个方法2.0里面没有
所以2.0可以这样 (s+"").trim() == 0
这里的关键就是 s + "" 这个操作可以把null转换为""
注意第二个参数只能是""或string.Empty 这样的累加几乎是不消耗时间的,如果第二个参数是" "(一个空格)这个时间就远远不止了
字符串拼接
字符串累加,这个道理和Regex一样,不要盲目崇拜StringBuilder
在大量(或不确定的)string拼接的时候,StringBuilder确实可以起到提速的作用
而少数几个固定的string累加的时候就不需要StringBuilder 了,毕竟StringBuilder 的初始化也是需要时间的
以下代码,字符串不会在运行时进行拼接,而是会在编译时直接生成一个字符串。
- private static void NewMethod3()
- {
- string re2="123"+"abc"+"456"; ///该代码等效于///string re2="123abc456";
- }
- private static void NewMethod4()
- {
- const string a="t";
- string re="abc"+a; ///因为a是一个常量,所以该代码等效于string=re="abc"+"t"; 最终等效于string re="abct";
- }
如果有别的类型,最好先用.toString()的方法转换。
感谢#5楼 2014-03-24 16:45 残蛹 博友提供的说明
ps: 这段我确实记得我是写过的来着,不知道怎么的,发出来的时候就不见了.....
此外还有一个string.Concat方法,该方法可以小幅度的优化程序的速度,幅度很小
他和string.Join的区别在于没有间隔符号(我之前常用string.Join("",a,b,c,d),不要告诉我只有我一个人这么干)
另一种经常遇到的字符串拼接
- public string JoinIds(List<User> users)
- {
- StringBuilder sb = new StringBuilder();
- foreach (var user in users)
- {
- sb.Append("'");
- sb.Append(user.Id);
- sb.Append("',");
- }
- sb.Length = sb.Length - 1;
- return sb.ToString();
- }
对于这种情况有2中优化的方案
对于3.5以上可以直接使用Linq辅助,这种方案代码少,但是性能相对差一些
- public string JoinIds(List<User> users)
- {
- return "'" + string.Join("','", users.Select(it => it.Id)) + "'";
- }
对于非3.5或对性能要求极高的场合
- public string JoinIds(List<User> users)
- {
- var ee = users.GetEnumerator();
- StringBuilder sb = new StringBuilder();
- if (ee.MoveNext())
- {
- sb.Append("'");
- sb.Append(ee.Current.Id);
- sb.Append("'");
- while (ee.MoveNext())
- {
- sb.Append(",'");
- sb.Append(ee.Current.Id);
- sb.Append("'");
- }
- }
- return sb.ToString();
- }
bool类型的判断返回
这种现象常见于新手程序员中
- //写法1
- if(state == 1)
- {
- return true;
- }
- else
- {
- return false;
- }
- //写法2
- return state == 1 ? true : false;
- //优化后
- return state == 1;
C#小性能知识的更多相关文章
- 微信小程序知识总结及案例集锦
微信小程序知识总结及案例集锦 微信小程序的发展会和微信公众号一样,在某个时间点爆发 学习路径 微信小程序最好的教程肯定是官方的文档啦,点击这里直达 微信官方文档 认真跟着文档看一遍,相信有vue前端经 ...
- 性能测试--测试流程、APDEX、linux性能知识
测试流程.APDEX.linux性能知识 一.性能测试流程: 整体流程:收集需求-->搭建测试环境-->设计性能测试场景-->开发测试脚本-->执行测试-->收集数据-- ...
- 前端必备性能知识 - http2.0
前端开发中,性能是一定绕不开的,今天就来说一下前后台通信中最重要的一个通道--HTTP2.0 最开始的通讯协议叫http1.0,作为始祖级的它,定义了最基本的数据结构,请求头和请求体,以及每一个字段的 ...
- Android小技术知识(多用于面试)
Android Dev Doc Android 开发 多使用内部类 使用方便且效率高 UI方面的知识 一.在编写layout的xml文件时,一定要仔细!如果在报错的时候,如何解决? 解决:将xml仔细 ...
- 微信小程序知识云开发
一个小程序最多5个服务类目,一个月可以修改3次类目 小程序侵权投诉的发起与应对 软件著作权作品登记证书 实现小程序支付功能 如何借助官方支付api简单.高效率地实现小程序支付功能 借助小程序云开发实现 ...
- Jmeter——小性能用例
1.添加默认值,将代理服务器写入 2.添加HTTP请求头,将域名部分用变量形式写入:${__CSVRead(D:/number.txt,0)},这是为了查询不同页面,在D:/number.txt路径下 ...
- 微信小程序知识集锦
1.自定义属性/获取属性值 自定义属性: <view bindtap='shopPost' data-myid='item.goods_id' ></view> 获取属性: s ...
- Web测试的常用测试用例与知识
1. Web测试中关于登录的测试 2. 搜索功能测试用例设计 3. 翻页功能测试用例 4. 输入框的测试 5. Web测试的常用的检查点 6. 用户及权限管理功能常规测试方法 7. Web测试之兼容性 ...
- web测试常用的用例及知识
1. Web测试中关于登录的测试... 1 2. 搜索功能测试用例设计... 2 3. 翻页功能测试用例... 3 4. 输入框的测试... 5 5. ...
随机推荐
- 栈ADT的数组实现
/* 栈的数组实现声明 */ struct StackRecord; typedef struct StackRecord *Stack; #define MinSstackSize 5 #defin ...
- windows Oracle DBases auto backUp
- 浅谈C语言中的强符号、弱符号、强引用和弱引用
摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...
- UEditor用法
UEditor是百度的编辑器,界面美观,功能强大,用起来还不错. 详见该链接http://ueditor.baidu.com/ 一.下载 http://ueditor.baidu.com/downlo ...
- 《Effective C++》:条款46-条款47
条款46请输入转换的时候,需要定义非模板成员函数 条款47请使用traits class表现类型信息 条款46:须要类型转换时请为模板定义非成员函数 条款 24提到过为什么non-member函数才有 ...
- HDoj-2072-字数
字数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HTML5音乐可视化
环境搭建 1,安装nodejs和Git,配置环境变量2,安装express,npm install -g express-generator3,创建项目,express -e music(项目名称)4 ...
- Flash Recovery Area 的备份
Flash Recovery Area 的备份 备份命令是Flash recovery Area,该命令是Oracle 10g以后才有的.10g引进了flash recovery area,同时在rm ...
- hyper-v新内容
摘自http://geek.csdn.net/news/detail/30249 继开源.NET,微软推出Hyper-V Container技术及Nano Server Hyper-V Server ...
- C#整理1——进制转换
进制转换:二进制,八进制,十进制,十六进制. (一)二进制转十进制: 1.写2 2.标指数,从右向左,从0开始依次标记 3.乘系数,一一对应. 4.相加. 例:二进制数1101转十进制数* 1.2 ...