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. ...
随机推荐
- linux中的strings命令简介
摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道 ...
- JavaScript 自动生成 年月范围 选择
近日做项目涉及到日期选择,为了用户界面友好,于是加入了一年内的年月段的查询功能,先看效果 会自动判断当前年份 以下为html代码 其中用到了 Jquery 和 struts 标签 但是这两个都不是重要 ...
- 8位(bit)=1字节(Byte)
8位(bit)=1字节(Byte),1024字节=1KB: 提到了字节,不得不再提到“字”这个计量单位:“字”由若干个字节构成,字的位数叫做字长,字长就是说字所对应的二进制数的长度.不同的机器有不同的 ...
- 在CSDN上看到的一个过滤方法,感觉还不错
/// <summary> /// 把字符串中包含的敏感词替换成别的关键字 /// </summary> /// <param name="s"> ...
- CalendarHelper日期计算工具,各种日期的获取和计算
今天分享一个日期获取和计算的工具类,这个最初是用在项目中获取每周每月日期用的. <Attention> 之后逛帖子的时候发现了这个专门处理日期的库,java上也有,android上还为了避 ...
- iOS 9适配技巧(更新版)
转自: http://www.cocoachina.com/ios/20150929/13598.html 中文快速导航: 1.iOS9网络适配_ATS:改用更安全的HTTPS(见Demo1) i ...
- linux 下访问mysql
1:先进到root:/# /usr/local/mysql/bin/2:root:/# mysql -u root -p Enter password:
- CentOS上编译安装Git
1. 安装(编译安装)软件 # 先安装git依赖的包 yum install zlib-devel yum install openssl-devel yum install perl yum ins ...
- linux判断日期是否合法
#include <time.h> #include <stdio.h> typedef enum { , } bool; bool check_date(int year, ...
- CSS自学笔记(13):CSS3 2D/3D转换
CSS3中新增了对元素进行2D和3D的转换效果,这样可以是开发人员很方便的做出视觉效果更好的网页来. 通过CSS3中属性的定义,我们可以对元素进行移动.缩放.拉伸.旋转等等,可以通过定义transfo ...