因朋友极力推荐,近一年在一家国企上班。忙忙碌碌天天叨叨不停,就是不写代码。现在之前的基础都忘差不多了,不感慨了,静静的补课吧!

一,优化举例

二,浅谈StringComparison

三,C# CultureInfo 类 各国语言对应的区域性名称

一,优化举例

我们在写程序的时候,经常会用到字符串对比。例如:if(IsCheck  == "true")

当大小写敏感的时候一般都用:

string.ToLower()或者string.ToUpper()变成统一的大小写模式再来比对数据。

其实这样不是很好比较方式,字符串在进行大小写转换时会消耗额外的性能。

我们应该使用:

string.Equals(dr["IsSelected"].ToString(), "true", StringComparison.OrdinalIgnoreCase)

来进行比较,以提升比较性能。

二,浅谈StringComparison

下面就来谈下StringComparison。

public enum StringComparison

{

CurrentCulture,

CurrentCultureIgnoreCase,

InvariantCulture,

InvariantCultureIgnoreCase,

Ordinal,

OrdinalIgnoreCase

}

CurrentCulture 使用区域敏感排序规则和当前区域比较字符串。

CurrentCultureIgnoreCase 使用区域敏感排序规则、当前区域来比较字符串,同时忽略被比较字符串的大小写。

InvariantCulture 使用区域敏感排序规则和固定区域比较字符串。

InvariantCultureIgnoreCase 使用区域敏感排序规则、固定区域来比较字符串,同时忽略被比较字符串的大小写。

Ordinal 使用序号排序规则比较字符串。

OrdinalIgnoreCase 使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。

1.首先是StringComparison.Ordinal

在进行调用String.Compare(string1,string2,StringComparison.Ordinal)的时候是进行非语言(non-linguistic)上的比较,API运行时将会对两个字符串进行byte级别的比较,因此这种比较是比较严格和准确的,并且在性能上也很好,一般通过StringComparison.Ordinal来进行比较比使用String.Compare(string1,string2)来比较要快10倍左右.(可以写一个简单的小程序验证,这个挺让我惊讶,因为平时使用String.Compare从来就没想过那么多).StringComparison.OrdinalIgnoreCase就是忽略大小写的比较,同样是byte级别的比较.性能稍弱于StringComparison.Ordinal.

2.StringComparison.CurrentCulture

在当前的区域信息下进行比较,这是String.Compare在没有指定StringComparison的时候默认的比较方式.例子如下:

using UnityEngine;

using System.Collections;

using System;

using System.Threading;

using System.Globalization;

public class TEsss : MonoBehaviour

{

void Start()

{

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); //当前的区域信息是美国

string s1 = "visualstudio";

string s2 = "windows";

//Console.WriteLine(String.Compare(s1, s2, StringComparison.CurrentCulture)); //输出"-1"

Debug.Log(String.Compare(s1, s2, StringComparison.CurrentCulture));

Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); //当前的区域信息是瑞典

//Console.WriteLine(String.Compare(s1, s2, StringComparison.CurrentCulture)); //输出"1"

Debug.Log(String.Compare(s1, s2, StringComparison.CurrentCulture));

}

}

PS:CultureInfo类在第三部分有讲解。

为什么在瑞典里面 单词相同么?

那两个单词不是相同,比较值为0才是相同。瑞典里边的字母与英语里边的字母部分一样,但有些不一样。同一个v代表的东西不一样。

3.StringComarison.InvariantCulture

使用StringComarison.InvariantCulture来进行字符串比较,在任何系统中(不同的culture)比较都将得到相同的结果,他是使用CultureInfo.InvariantCulture的静态成员CompareInfo来进行比较操作的.例子如下:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); //当前的区域信息是美国

string s1 = "visualstudio";

string s2 = "windows";

Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture)); //输出"-1"

Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); //当前的区域信息是瑞典

Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture)); //输出"-1"

三,C# CultureInfo 类 各国语言对应的区域性名称

CultureInfo 类保存区域性特定的信息,如关联的语言、子语言、国家/地区、日历和区域性约定。此类还提供对DateTimeFormatInfo、NumberFormatInfo、CompareInfo 和 TextInfo 的区域性特定实例的访问。这些对象包含区域性特定操作(如大小写、格式化日期和数字以及比较字符串)所需的信息。

String 类间接地使用此类来获取有关默认区域性的信息。

区域性名称和标识符

区域性名称遵循 RFC 1766 标准,格式为“<languagecode2>-<country/regioncode2>”,其中 <languagecode2> 是从 ISO 639-1 派生的由两个小写字母构成的代码,<country/regioncode2> 是从 ISO 3166 派生的由两个大写字母构成的代码。例如,美国英语为“en-US”。在双字母语言代码不可用的情况中,将使用从 ISO 639-2 派生的三字母代码;例如,三字母代码“div”用于使用 Dhivehi 语言的区域。某些区域性名称带有指定书写符号的后缀;例如“-Cyrl”指定西里尔语书写符号,“-Latn”指定拉丁语书写符号。

System.Globalization 命名空间中的此类和其他类接受并使用下列预定义的区域性名称和标识符。

区域性名称

区域性标识符

语言-国家/地区

""(空字符串)

0x007F

固定区域性

af

0x0036

南非荷兰语

af-ZA

0x0436

南非荷兰语 - 南非

sq

0x001C

阿尔巴尼亚语

sq-AL

0x041C

阿尔巴尼亚语 - 阿尔巴尼亚

ar

0x0001

阿拉伯语

ar-DZ

0x1401

阿拉伯语 - 阿尔及利亚

ar-BH

0x3C01

阿拉伯语 - 巴林

ar-EG

0x0C01

阿拉伯语 - 埃及

ar-IQ

0x0801

阿拉伯语 - 伊拉克

ar-JO

0x2C01

阿拉伯语 - 约旦

ar-KW

0x3401

阿拉伯语 - 科威特

ar-LB

0x3001

阿拉伯语 - 黎巴嫩

ar-LY

0x1001

阿拉伯语 - 利比亚

ar-MA

0x1801

阿拉伯语 - 摩洛哥

ar-OM

0x2001

阿拉伯语 - 阿曼

ar-QA

0x4001

阿拉伯语 - 卡塔尔

ar-SA

0x0401

阿拉伯语 - 沙特阿拉伯

ar-SY

0x2801

阿拉伯语 - 叙利亚

ar-TN

0x1C01

阿拉伯语 - 突尼斯

ar-AE

0x3801

阿拉伯语 - 阿拉伯联合酋长国

ar-YE

0x2401

阿拉伯语 - 也门

hy

0x002B

亚美尼亚语

hy-AM

0x042B

亚美尼亚语 - 亚美尼亚

az

0x002C

阿泽里语

az-AZ-Cyrl

0x082C

阿泽里语(西里尔语)- 阿塞拜疆

az-AZ-Latn

0x042C

阿泽里语(拉丁)- 阿塞拜疆

eu

0x002D

巴斯克语

eu-ES

0x042D

巴斯克语 - 巴斯克地区

be

0x0023

白俄罗斯语

be-BY

0x0423

白俄罗斯语 - 白俄罗斯

bg

0x0002

保加利亚语

bg-BG

0x0402

保加利亚语 - 保加利亚

ca

0x0003

加泰罗尼亚语

ca-ES

0x0403

加泰罗尼亚语 - 加泰罗尼亚地区

zh-HK

0x0C04

中文 - 香港特别行政区

zh-MO

0x1404

中文 - 澳门特别行政区

zh-CN

0x0804

中文 - 中国

zh-CHS

0x0004

中文(简体)

zh-SG

0x1004

中文 - 新加坡

zh-TW

0x0404

中文 - 台湾

zh-CHT

0x7C04

中文(繁体)

hr

0x001A

克罗地亚语

hr-HR

0x041A

克罗地亚语 - 克罗地亚

cs

0x0005

捷克语

cs-CZ

0x0405

捷克语 - 捷克共和国

da

0x0006

丹麦语

da-DK

0x0406

丹麦语 - 丹麦

div

0x0065

马尔代夫语

div-MV

0x0465

马尔代夫语 - 马尔代夫

nl

0x0013

荷兰语

nl-BE

0x0813

荷兰语 - 比利时

nl-NL

0x0413

荷兰语 - 荷兰

en

0x0009

英语

en-AU

0x0C09

英语 - 澳大利亚

en-BZ

0x2809

英语 - 伯利兹

en-CA

0x1009

英语 - 加拿大

en-CB

0x2409

英语 - 加勒比

en-IE

0x1809

英语 - 爱尔兰

en-JM

0x2009

英语 - 牙买加

en-NZ

0x1409

英语 - 新西兰

en-PH

0x3409

英语 - 菲律宾

en-ZA

0x1C09

英语 - 南非

en-TT

0x2C09

英语 - 特立尼达和多巴哥

en-GB

0x0809

英语 - 英国

en-US

0x0409

英语 - 美国

en-ZW

0x3009

英语 - 津巴布韦

et

0x0025

爱沙尼亚语

et-EE

0x0425

爱沙尼亚语 - 爱沙尼亚

fo

0x0038

法罗语

fo-FO

0x0438

法罗语 - 法罗群岛

fa

0x0029

波斯语

fa-IR

0x0429

波斯语 - 伊朗

fi

0x000B

芬兰语

fi-FI

0x040B

芬兰语 - 芬兰

fr

0x000C

法语

fr-BE

0x080C

法语 - 比利时

fr-CA

0x0C0C

法语 - 加拿大

fr-FR

0x040C

法语 - 法国

fr-LU

0x140C

法语 - 卢森堡

fr-MC

0x180C

法语 - 摩纳哥

fr-CH

0x100C

法语 - 瑞士

gl

0x0056

加利西亚语

gl-ES

0x0456

加利西亚语 - 加利西亚地区

ka

0x0037

格鲁吉亚语

ka-GE

0x0437

格鲁吉亚语 - 格鲁吉亚

de

0x0007

德语

de-AT

0x0C07

德语 - 奥地利

de-DE

0x0407

德语 - 德国

de-LI

0x1407

德语 - 列支敦士登

de-LU

0x1007

德语 - 卢森堡

de-CH

0x0807

德语 - 瑞士

el

0x0008

希腊语

el-GR

0x0408

希腊语 - 希腊

gu

0x0047

古吉拉特语

gu-IN

0x0447

古吉拉特语 - 印度

he

0x000D

希伯来语

he-IL

0x040D

希伯来语 - 以色列

hi

0x0039

印地语

hi-IN

0x0439

印地语 - 印度

hu

0x000E

匈牙利语

hu-HU

0x040E

匈牙利语 - 匈牙利

is

0x000F

冰岛语

is-IS

0x040F

冰岛语 - 冰岛

id

0x0021

印度尼西亚语

id-ID

0x0421

印度尼西亚语 - 印度尼西亚

it

0x0010

意大利语

it-IT

0x0410

意大利语 - 意大利

it-CH

0x0810

意大利语 - 瑞士

ja

0x0011

日语

ja-JP

0x0411

日语 - 日本

kn

0x004B

卡纳达语

kn-IN

0x044B

卡纳达语 - 印度

kk

0x003F

哈萨克语

kk-KZ

0x043F

哈萨克语 - 哈萨克斯坦

kok

0x0057

贡根语

kok-IN

0x0457

贡根语 - 印度

ko

0x0012

朝鲜语

ko-KR

0x0412

朝鲜语 - 韩国

ky

0x0040

吉尔吉斯语

ky-KG

0x0440

吉尔吉斯语 - 吉尔吉斯坦

lv

0x0026

拉脱维亚语

lv-LV

0x0426

拉脱维亚语 - 拉脱维亚

lt

0x0027

立陶宛语

lt-LT

0x0427

立陶宛语 - 立陶宛

mk

0x002F

马其顿语

mk-MK

0x042F

马其顿语 - 前南斯拉夫联盟马其顿共和国

ms

0x003E

马来语

ms-BN

0x083E

马来语 - 文莱

ms-MY

0x043E

马来语 - 马来西亚

mr

0x004E

马拉地语

mr-IN

0x044E

马拉地语 - 印度

mn

0x0050

蒙古语

mn-MN

0x0450

蒙古语 - 蒙古

no

0x0014

挪威语

nb-NO

0x0414

挪威语(伯克梅尔)- 挪威

nn-NO

0x0814

挪威语(尼诺斯克)- 挪威

pl

0x0015

波兰语

pl-PL

0x0415

波兰语 - 波兰

pt

0x0016

葡萄牙语

pt-BR

0x0416

葡萄牙语 - 巴西

pt-PT

0x0816

葡萄牙语 - 葡萄牙

pa

0x0046

旁遮普语

pa-IN

0x0446

旁遮普语 - 印度

ro

0x0018

罗马尼亚语

ro-RO

0x0418

罗马尼亚语 - 罗马尼亚

ru

0x0019

俄语

ru-RU

0x0419

俄语 - 俄罗斯

sa

0x004F

梵语

sa-IN

0x044F

梵语 - 印度

sr-SP-Cyrl

0x0C1A

塞尔维亚语(西里尔语)- 塞尔维亚

sr-SP-Latn

0x081A

塞尔维亚语(拉丁)- 塞尔维亚

sk

0x001B

斯洛伐克语

sk-SK

0x041B

斯洛伐克语 - 斯洛伐克

sl

0x0024

斯洛文尼亚语

sl-SI

0x0424

斯洛文尼亚语 - 斯洛文尼亚

es

0x000A

西班牙语

es-AR

0x2C0A

西班牙语 - 阿根廷

es-BO

0x400A

西班牙语 - 玻利维亚

es-CL

0x340A

西班牙语 - 智利

es-CO

0x240A

西班牙语 - 哥伦比亚

es-CR

0x140A

西班牙语 - 哥斯达黎加

es-DO

0x1C0A

西班牙语  - 多米尼加共和国

es-EC

0x300A

西班牙语 - 厄瓜多尔

es-SV

0x440A

西班牙语 - 萨尔瓦多

es-GT

0x100A

西班牙语 - 危地马拉

es-HN

0x480A

西班牙语 - 洪都拉斯

es-MX

0x080A

西班牙语 - 墨西哥

es-NI

0x4C0A

西班牙语 - 尼加拉瓜

es-PA

0x180A

西班牙语 - 巴拿马

es-PY

0x3C0A

西班牙语 - 巴拉圭

es-PE

0x280A

西班牙 - 秘鲁

es-PR

0x500A

西班牙语 - 波多黎各

es-ES

0x0C0A

西班牙语 - 西班牙

es-UY

0x380A

西班牙语 - 乌拉圭

es-VE

0x200A

西班牙语 - 委内瑞拉

sw

0x0041

斯瓦希里语

sw-KE

0x0441

斯瓦希里语 - 肯尼亚

sv

0x001D

瑞典语

sv-FI

0x081D

瑞典语 - 芬兰

sv-SE

0x041D

瑞典语 - 瑞典

syr

0x005A

叙利亚语

syr-SY

0x045A

叙利亚语 - 叙利亚

ta

0x0049

泰米尔语

ta-IN

0x0449

泰米尔语 - 印度

tt

0x0044

鞑靼语

tt-RU

0x0444

鞑靼语 - 俄罗斯

te

0x004A

泰卢固语

te-IN

0x044A

泰卢固语 - 印度

th

0x001E

泰语

th-TH

0x041E

泰语 - 泰国

tr

0x001F

土耳其语

tr-TR

0x041F

土耳其语 - 土耳其

uk

0x0022

乌克兰语

uk-UA

0x0422

乌克兰语 - 乌克兰

ur

0x0020

乌尔都语

ur-PK

0x0420

乌尔都语 - 巴基斯坦

uz

0x0043

乌兹别克语

uz-UZ-Cyrl

0x0843

乌兹别克语(西里尔语)- 乌兹别克斯坦

uz-UZ-Latn

0x0443

乌兹别克语(拉丁)- 乌兹别克斯坦

vi

0x002A

越南语

vi-VN

0x042A

越南语 - 越南

固定区域性、非特定区域性和特定区域性

这些区域性通常分为三个集合:固定区域性、非特定区域性和特定区域性。

固定区域性不区分区域性。可以使用空字符串 ("") 按名称或者按区域性标识符 0x007F 来指定固定区域性。InvariantCulture 检索固定区域性的实例。它与英语语言关联,但不与任何国家/地区关联。它几乎可用在要求区域性的“全局化”命名空间中的所有方法中。

非特定区域性是与某种语言关联但不与国家/地区关联的区域性。特定区域性是与某种语言和某个国家/地区关联的区域性。例如,“fr”是非特定区域性,而“fr-FR”是特定区域性。注意,“zh-CHS”(简体中文)和“zh-CHT”(繁体中文)均为非特定区域性。

请注意,不建议为非特定区域性创建 CompareInfo 类的实例,这是因为它包含的数据是任意的。若要显示数据并对其进行排序,请同时指定语言和地区。此外,为非特定区域性创建的 CompareInfo 对象的 Name 属性仅返回国家,且不包括地区。

区域性有层次结构,即特定区域性的父级是非特定区域性,而非特定区域性的父级是 InvariantCulture。Parent 属性将返回与特定区域性关联的非特定区域性。

如果特定区域性的资源在系统中不可用,则使用非特定区域性的资源;如果非特定区域性的资源也不可用,那么使用主程序集中嵌入的资源。

文章参考:

http://www.cnblogs.com/zhw511006/archive/2010/07/09/1774591.html

http://blog.csdn.net/dannywj1371/article/details/6936147

http://blog.csdn.net/lhy2199/article/details/7410694

C# 字符串比较优化(StringComparison)相关推荐

  1. C++性能优化-字符串的优化

    字符串的优化 糟糕的字符串连接函数 在C++中字符串是按照值的形式实现的,又因为C++中字符串底层是使用动态内存实现的,因此.在项目中对字符串的优化必不可少,也是性能优化的重点. 假如代码中有如下re ...

  2. Java编程性能调优-01|字符串性能优化不容小觑,百M内存轻松存储几十G数据

    一.字符串性能优化不容小觑,百M内存轻松存储几十G数据 一.String 对象是如何实现的? String str1= "abc"; String str2= new String ...

  3. java字符串分割性能_String字符串性能优化的几种方案

    反编译后的代码: 1 //Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.2 //Jad home page:http://www ...

  4. 【C 语言】字符串拷贝 ( 优化指针操作 )

    文章目录 一.优化指针操作 二.优化指针操作 2 三.优化指针操作 3 四.优化指针操作 4 一.优化指针操作 在上一篇博客 [C 语言]字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 ...

  5. mysql 字符串索引 优化_MySQL性能优化之索引调优实战

    索引失效场景或使用注意事项 a.索引无法存储null值,所以建议都给默认值 b.如果条件中有or,即使使用了索引条件也不起作用,所以尽量少用or 如果想使用or,又让索引生效,只能将or的每个列上加上 ...

  6. Java字符串性能优化

    对字符串的性能进行优化,找出一种方法能够以最快的时间创建赋值字符串. 我们使用String intern() 的方法来优化字符串. 完整代码 public class Optimization {pu ...

  7. js正则表达式匹配字符串与优化过程

    前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...

  8. mysql 字符串 索引优化_轻松优化MySQL-之索引优化1

    什么是索引?为什么要建立索引 索引用于快速找出在某个列中有一特定值的行,不使用索引MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花费的时间就越多,如果表中查询的列有一个索 ...

  9. ios整理(六)关于用富文本在tableview的cell去加载html字符串的优化方案

    1.相信用iOS系统的类去加载html字符串很多人第一反应就是 NSString *contens = @"1231我给你数<a herf="www.baidu.com&qu ...

最新文章

  1. 摧枯拉朽,说说ES6的三把火
  2. 《虚拟机深入应用实践》已经出版
  3. float与double类型区别比较
  4. windows局域网文件共享的使用
  5. 异步编程中的最佳做法(Async/Await) --转
  6. 论文浅尝 | Understanding Black-box Predictions via Influence Func
  7. linux下配置socks 5代理
  8. 频数直方图的步骤_如何运用QC七大手法和九大步骤分析问题?
  9. 批处理,扫描当前目录下的文件,传到指定文本中
  10. pandownload最新复活版登录失败_神途手游万能登录器app-神途手游万能登录器app最新手机版下载v1.0...
  11. GPS经纬度一直不会改变的解决方法
  12. distpicker
  13. 喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。
  14. word文档标题变成了一条竖线怎么处理
  15. 计算机网络图标在哪里照,网络设备图标-电脑上的网络图标怎么显示
  16. 记住,在看小电影前一定要检查下域名是不是 HTTPS 的
  17. 浩辰CAD参考图剪辑编辑
  18. 实现黑客帝国数字雨效果
  19. C# 程序间通信的各种途径及解析
  20. node.js使用WebTorrent构造流式torrent客户端

热门文章

  1. U盘用来安装系统后无法打开
  2. 对计算机网络的保密管理整改措施,保密工作自查整改报告
  3. vs2012 MFC连接及操作access(2007)数据库(ADO)
  4. 蒲公英 · JELLY技术周刊 Vol.22: npm i react-router@6.0.0-beta.0
  5. Kubernetes基础:重启pod的方法
  6. 玩转Jetson Nano(一)烧写系统
  7. springboot集成elasticsearch集群出现java.net.SocketTimeoutException: 60 milliseconds timeout on connection
  8. [2022.1.13]UPC-2021级新生个人训练赛第22场-9783 Problem H 铺地砖
  9. 大商创MySQL不支持_大商创配置文件config.php详解
  10. [51nod1299]监狱逃离