两种不同字符串比较方法的性能对比

【Unity3D性能优化】字符串比较方法效率对比与最佳实践 本文深入探讨了Unity3D中字符串比较方法的性能差异与优化策略,对比了Equals、Compare等方法的效率,并提供了高频场景下的最佳实践。通过实测数据展示了不同方法的性能差距,帮助开发者避免常见陷阱,提升游戏开发效率。 阅读详情

 

最近比较关注C#书写出来的代码性能问题,越研究就越觉得很有意思。
在日常的编程过程总,由于编程需要,我们经常会比较两个字符串是否相等,然后再做相应的处理。代码书写起来是觉得很爽,不是吗?if (a==b) then ……else……但是有没有更快的方式呢?为此查阅了一些资料了MSDN文档。当我们调用 a==b的时候,通过IL代码可以看到内部实际上调用了String.Equals(string,string)这个方法

IL_0021:  call        bool  [mscorlib]System.String::op_Equality( string ,
                                                                 
string )
  IL_0026:  stloc.s    re

 

public   static   bool  Equals( string  a,  string  b)
{
    
if (a == b)
    
{
        
return true;
    }

    
if ((a != null) && (b != null))
    
{
        
return EqualsHelper(a, b);
    }

    
return false;
}


更为严重的是更底层调用的是EqualsHelper辅助方法,它首先比较两个字符串的长度,然后逐个字符的通过引用指针的方式进行比较,由于无法明确的区隔是否和语言别有关系,内部处理异常复杂。有没有更快速的方法呢?
答案是有的。
.Net 2.0中新增了一个 StringComparison枚举类型,实际上我们大多数的字符串比较是和语言别无关的,我们应该使用Ordinal和OrdinalIgnoreCase两个枚举值。处于性能考虑,在字符串比较时不应该直接使用==操作符,而应该使用
bool Equals(string value, StringComparison comparisonType)
bool Equals(string a, string b, StringComparison comparisonType)
为此,我进行了一个测试,看看不等的==操作符和String.Equals方法之间的性能差别有多大。
测试代码:
  string  a  =   " abcdefghigklmnopqrstuvwxyz0123456789!@#$%^&*()_+ " ;
            
string  b  =   " abcdefghigklmnopqrstuvwxyz0123456789!@#$%^&*()_+? " ;
            Stopwatch watch 
=   new  Stopwatch();
            watch.Start();
            
for  ( int  i  =   0 ; i  <   90000000 ; i ++ )  {
              
bool re = a.Equals(b, StringComparison.OrdinalIgnoreCase);
            }

            watch.Stop();
            
double  time  =  watch.Elapsed.TotalSeconds;
            Console.Write(time);
            Console.ReadLine();
测试了三次,分别为:1.1163117,1.106148,1.1041815
然后运行下面的代码:
   string  a  =   " abcdefghigklmnopqrstuvwxyz0123456789!@#$%^&*()_+ " ;
            
string  b  =   " abcdefghigklmnopqrstuvwxyz0123456789!@#$%^&*()_+? " ;
            Stopwatch watch 
=   new  Stopwatch();
            watch.Start();
            
for  ( int  i  =   0 ; i  <   90000000 ; i ++ )  {
                
bool re = (a == b);
            }

            watch.Stop();
            
double  time  =  watch.Elapsed.TotalSeconds;
            Console.Write(time);
            Console.ReadLine();
测试了三次,分别为:1.6392576,1.6143791,1.6253847
算出平均值之后,两者在速度上相差46.675%。
呵呵,差别惊人阿!
 
开源大模型“去审查化”技术解析:从LLaMA架构到本地部署与伦理边界 大型语言模型(LLM)基于Transformer架构,通过海量数据训练获得理解和生成自然语言的能力。其核心原理在于自注意力机制对上下文关系的建模。为了确保输出内容的安全与合规,主流模型普遍采用基于人类反馈的强化学习(RLHF)等技术进行安全对齐。这一过程旨在使模型行为符合人类价值观,是AI伦理工程实践的关键环节。然而,在特定研究场景下,如对抗性测试或内容安全算法研究,技术人员需要模拟极端对话以评估系统鲁棒性,这催生了针对“去对齐”或“移除护栏”的技术探索。此类技术通常通过对预训练模型进行反向微调或继续训练来 阅读详情

相关推荐

具身智能的边缘计算核心构成方案

摘要: 具身智能(Embodied Intelligence)依赖物理实体与环境交互,而边缘计算(Edge Computing)通过本地化数据处理降低延迟、提升实时性。两者结合的核心方案包含五层架构:传感器层采集环境数据,边缘处理单元执行本地计算,通信模块实现低延迟传输,决策引擎运行轻量AI模型,执行器接口转化动作为物理操作。该方案以“边缘优先”为原则,满足毫秒级响应(如延迟<50ms),同时优化能效(功耗降低30%)和隐私保护。适用于机器人、自动驾驶等场景,通过分层闭环设计确保在资源受限环境中的可靠

老郑的博客 810

字符串操作速度比较

比较一下平时使用字符串操作性能的问题。参考一篇微信公众号文章。 直接上代码: public static void main(String[] args) { String s1="123"; String s2="123"; String s3=new String("123"); System.out.println(s1...

精确而优雅 1380

保姆级教程:用COMSOL LiveLink™ for MATLAB 玩转自定义PDE,从理论到仿真一条龙

本文详细介绍了如何利用COMSOL LiveLink™ for MATLAB实现自定义PDE的从理论到仿真的完整流程。通过PDE模块与MATLAB的无缝集成,用户可以灵活处理非标准偏微分方程,适用于材料建模、传热传质验证等多物理场耦合研究。教程涵盖环境配置、方程标准化、界面操作及高级应用技巧,为工程仿真研究者提供原子级控制方案。

weixin_34098209的博客 354

几种字符串匹配算法性能简单实验对比

做了一个很粗糙的实验,比较了几种字符串匹配算法的性能。程序用-O3进行编译优化。以下为待查找的文本长度为434018字节,模式串长度为4时的典型实验结果。可以看到,horspool算法最快,表现最差的为KMP系的shift_and算法(实验结果与《柔性字符串匹配》一书中的结果一致)。以下为horspool,shift_and和BNDM算法的实验源码:strstr(C库函数) time:74

linyq@BambooFan ~ 2347

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1173

AD从原理图到PCB超详细教程

我在学习AD的时候,看了网上很多教程,但是东西很杂,有很多条理不清而且废话很多,所以相信大家学习的时候也是遇到一样的困难。我就特地写一篇帖子,整理了一下AD从画原理图开始一直到画完PCB文件的所有步骤,一方面是供大家参考学习,另一方面可以方便我自己学习记忆更加深刻。我用的版本是AD16中文版,大家用新的版本AD20或者AD22应该操作都是差不多的。

人生寂寞如雪 18万+

PostgreSQL 如何应对因长字符串比较导致的性能下降?

长字符串比较导致的性能下降是 PostgreSQL 中一个常见的问题,但通过采取合适的解决方案,我们可以有效地提高数据库的性能。在实际应用中,我们需要根据具体情况选择合适的解决方案,例如使用合适的索引、优化查询语句、使用函数索引、分区表以及定期清理和优化数据库等。同时,我们还需要不断地学习和探索新的技术和方法,以应对不断变化的业务需求和技术挑战。解决 PostgreSQL 中长字符串比较导致的性能下降问题需要我们综合运用多种技术和方法,就像一场战斗需要我们运用各种武器和策略一样。

发现生活,分享智慧,一起成长! 1404

沈阳计算机研究所复试,沈阳计算所复试试题附答案.doc

沈阳计算所复试试题附答案目录数据结构1200612007220085200914操作系统16200616200718200818200919组成原理20200620200720200821200921经典算法22数据结构2006数据结构部分(共25分,第1题10分,第2题15分)在(下图)所示的有向图中:v1 v2v4 ...

weixin_42511053的博客 858

4-String、StringBuffer、StringBuilder的区别?

String类被被final修饰过,所以是一个不可以改变的类,每次操作都会产生一个新的String对象,指针指向新的对象地址。 StringBuffer、StringBuilder是String的增强类,是一个可以改变的类,是在原有的对象上进行操作,所以,如果要经常改变一个字符串,建议永这两个类。 StringBuffer和StringBuilder对比中StringBuffer是线程安全的,每一个方法都加了synchronize,但是效率相对StringBuilder会低一点 引入,如何判定一.

卓东来的博客 315

用Proteus8.9自带STM32F401VE的Controller仿真STM32F407ZGT6,F429IGT6

@用Proteus8.9自带STM32F401VE的Controller仿真STM32F407ZGT6,F429IGT6 一, 目前得到的 Proteus8.9版本软件能够支持的Cortex-M4固件库项目,只能到达STM32F401VE (如下图1所示)。 (图1) 作为ST公司Cortex-M4更为广泛应用的F407,F429系列芯片;现在的Proteus8.9版本软件还没有固件库支持,不能...

kaillen的博客 3万+

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

再谈两种不同字符串比较方法的性能对比

以前曾经动笔写过一片《字符串比较方法的性能对比》的文章,很多朋友提出了非常好的意见和建议。碰巧最近看到好多人在这样比较字符串 if(string.Compare(keyState,"M",true,CultureInfo.InvariantCulture)==0){ 似乎很有意思,大家都喜欢另辟蹊径的使用字符串比较,为了较为客观的反应各种字符串比较的优势,我特...

dizhong0883的博客 314

高电压技术的面试内容整理(详细版本:57题)

涵盖了高电压技术的关键领域,包括气体放电的物理过程、液体和固体介质的绝缘特性、高压外绝缘的分类与特性、电气设备绝缘试验的方法与原理、电力系统的防雷保护措施,以及内部过电压的产生、影响与限制方法,为理解和应对高电压环境下的电气问题提供了系统的知识框架。通过深入探讨气体放电理论、介质极化与损耗、绝缘子的电气特性、绝缘试验技术、防雷策略以及内部过电压的管理。

weixin_44808274的博客 775

基于Spring Boot的玩具进销存管理系统设计与实现

进销存是企业管理信息化的核心环节,涵盖采购入库、销售出库与库存盘点等业务闭环。其中库存数据的变化需要依赖流水记录与事务机制,确保每一笔操作可追溯且数据一致,同时通过行级锁与原子SQL避免并发扣减带来的超卖问题。在技术选型上,Spring Boot、MyBatis与MySQL的组合因自动配置、灵活SQL映射和稳定性能,成为中小型系统开发的主流方案。前后端分离架构配合JWT认证,能够有效提升开发效率与系统安全性。这些工程技术在零售、电商及生产制造等领域均有广泛应用,尤其在SKU繁多、季节性波动明显的玩具行业,一

weixin_34354173的博客 414

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java 字符串 之 String 赋值比较

http://www.verejava.com/?id=16993012522383/** 字符串 String 1. 字符串的赋值和初始化 2. 字符串的比较 3. 字符串的内存结构 4. 字符串操作的性能问题 */ public class TestString { public static void main(String[] args) { /* 字符串的赋值和初始化两种形式...

verejava的博客 1252

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

.Net 中字符串性能

Introduction 你在代码中处理字符串的方法可能会对性能产生令人吃惊的影响。在本文中,我需要考虑两个由于使用字符串而产生的问题:临时字符串变量的使用和字符串连接。 Background 每个项目都有需要你为其考虑编码标准的时候。使用 FxCop 是一个好的开始。我最喜爱的一组 FxCop 规则是“性能”那组。 于是,我就用 FxCop 来检查我的项目并发现一系列的字符...

aome1470的博客 102

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java与Go:字符串方法

在Java中,字符串可以通过多种方式进行定义和初始化1,使用字符串字面量初始化:你可以使用双引号将字符串文字括起来,并将其分配给一个变量。2,使用构造函数初始化:你可以使用 new 关键字和 String 类的构造函数来初始化一个字符串对象。");3,使用字符串连接符初始化:你可以使用加号运算符将多个字符串连接起来,并将结果分配给一个变量。4,使用字符串构造器初始化:你可以使用 StringBuilder 或 StringBuffer 类的构造器来创建可变的字符串,并将其转换为不可变的字符串。

weixin_45700531的博客 1466

Java中分割字符串

java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 public class StringSplit { public static void main(String[] args) { String sourceS

xbt312的专栏 358

gorush中的字符串比较:高效方法与性能对比

在Go语言开发中,字符串比较是最基础也最频繁的操作之一。作为高性能的推送通知服务器,gorush需要在处理 millions 级推送任务时保持高效的字符串比较能力。本文将从实际代码出发,分析gorush项目中常用的字符串比较方法及其性能表现,帮助开发者选择最优比较策略。 ## 1. 项目中的字符串比较现状 通过对gorush源代码的全局扫描发现,项目主要采用基础比较运算符进行字符串比较。在[m...

gitblog_00048的博客 681

MySQL 字符串和数值比较、字符串与字符串比较

一、字符串与数字比较 MySQL字符串和数字比较的坑:比较时会把字符串类型转成整数类型,从首字母开始,遇到非数字类型后终止。 原文: Comparison operations result in a value of1(TRUE),0(FALSE), orNULL. These operations work for both numbers and strings. Strings are automatically converted to numbers and numbers t...

无痕的博客 1万+

c#中字符串的比较方法-详解

背景 想想c#对==的重写,平时写代码时遇到字符串的比较直接使用==,但回头看这么写容易引起误会,为了能够更好的编写出好看的代码,这里先系统的举出c#中常见的比较方法。 1.Equals() 在对字符串比较中==与Equals()的普通用法相同(详细内容可见之前写的c#中Equals()与==的比较),Equals()的作用与优化比我们想象的要好的的多,话不多说,先上代码,然后再谈谈细节。 string s1 = "Hello"; string s2 = "Hello"; string s3 = "hell

m0_52390420的博客 7333
上一篇: 从有“,”分隔的字符串中取出被分隔的字符串并存储
下一篇: 网页无闪自动局部刷新实例
yehell
博客等级 码龄20年 27粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值