`
leonardleonard
  • 浏览: 783010 次
社区版块
存档分类
最新评论

简单代码的性能差异

阅读更多
《.net 框架程序设计》里的几句代码,我重新整理了一下,写成函数,这样下面的反编译代码看起来更方便点:

dahuzizyd的专栏    http://blog.csdn.net/dahuzizyd/


public void Boxing()
        
{
            Int32 v 
= 5;
            Console.WriteLine(
"{0},{1},{2}",v,v,v);
        }

        
public void Boxing1()
        
{
            Int32 v 
= 5;
            
object o = v;
            Console.WriteLine(
"{0},{1},{2}",o,o,o);
        }
两个函数的输出结果是一样的,但是哪一个函数更好呢?

第一个显然更简单,但是在性能上第二个好,看看反编译的代码:
Boxing函数:
.method public hidebysig instance void Boxing() cil managed
{
      
// Code Size: 31 byte(s)
      .maxstack 4
      .locals (
            int32 V_0)
      L_0000: ldc.i4.
5 
      L_0001: stloc.
0 
      L_0002: ldstr 
"{0},{1},{2}"
      L_0007: ldloc.
0 
      L_0008: box int32
      L_000d: ldloc.
0 
      L_000e: box int32
      L_0013: ldloc.
0 
      L_0014: box int32
      L_0019: call 
void [mscorlib]System.Console::WriteLine(stringobjectobjectobject)
      L_001e: ret 
}


 

Boxing1函数的:
.method public hidebysig instance void Boxing1() cil managed
{
      
// Code Size: 23 byte(s)
      .maxstack 4
      .locals (
            int32 V_0,
            
object V_1)
      L_0000: ldc.i4.
5 
      L_0001: stloc.
0 
      L_0002: ldloc.
0 
      L_0003: box int32
      L_0008: stloc.
1 
      L_0009: ldstr 
"{0},{1},{2}"
      L_000e: ldloc.
1 
      L_000f: ldloc.
1 
      L_0010: ldloc.
1 
      L_0011: call 
void [mscorlib]System.Console::WriteLine(stringobjectobjectobject)
      L_0016: ret 
}



第一个函数有三次装箱操作,第二个只有一次,在内存和时间消耗上都要小些。

这么简单的代码,在性能上都有这么大的差异,以前写的程序里还不知道有多少有问题的代码

版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。

分享到:
评论

相关推荐

    对比学习 ——simsiam 代码解析。.doc

    对比学习是一种无监督学习方法,它可以通过学习数据之间的相似性和差异性来学习有用的表示。 Simsiam 是一种对比学习方法,它的训练方式简单来说就是,一张图片,用不同的方式去增广后形成图片对,然后用一张去预测...

    code-performance-predictor:代码性能预测器

    基于GNN的代码性能预测器 此存储库需要Python 3.5+和解unzip包。 下载所需数据 我们使用GNN尝试学习预测使用LLVM编译器进行两组优化的应用程序的性能差异。 下面描述了所使用的数据集。 为此,我们使用以下方案中...

    lombok.jar

    lombok.jar是一款可以帮助用户在设计Java 程序的时候需要运用的一款简单代码工具,当您在开发程序的时候,利用lombok.jar可以让您消除POJO的臃肿效果,为您的代码进行瘦身优化操作,编辑代码的时候,由于技术和思维...

    从x86到ARM,实现C和C++语言90%代码自动迁移的方法论.docx

    代码迁移需要区分语言,像C/C++和指令级的差异是比较大的,因此在x86上编译出来的应用程序无法在鲲鹏上直接使用,因此要在鲲鹏上重新编译才可以。编译型语言所涉及的修改点相对更多,因为代码当中有可能蕴含一些对...

    jQuery权威指南-源代码

    虽然jQuery使用简单,但它毕竟是一门新的技术,与传统的JavaScript在性能与语法上存在诸多差异,需要相应的书籍来引导开发者们迅速而有效地掌握它,并能真正付诸实践。综观现在已经出版的中文类jQuery图书,不是...

    GPT-4 性能大幅提升后,替代程序员的概率是不是更高了?

    目前的自然语言处理模型仍然难以理解程序的正确性、性能和安全性等方面的要求,因此生成的代码可能会出现各种错误和漏洞。此外,生成的代码还需要进行调试、测试、优化和维护等工作,这些工作仍然需要程序员的参与。...

    mstime:一个轻量级的模块(2KB gzip),可在Node&浏览器上运行,以毫秒为单位来衡量和可视化代码性能。 没有依赖!

    时间 一个轻量级的模块(2KB gzip),可在Node&浏览器上运行,以毫秒为单位来衡量和可视化代码性能。 没有依赖! mstime使用 (高分辨率计时器)来测量起点和终点之间的差异。 mstime有一个简单的插件系统,可让您...

    汉诺塔java源码-LangBenchmarks:多种编程语言的性能基准

    这个项目适合所有对几种编程语言的性能差异感兴趣的人。 它还可以用于比较多种语言的语法。 作为奖励,还包括一些函数式逻辑编程语言。 目前基准支持: C C++ 目标-C C# D 帕斯卡 Java Scala 路亚 JavaScript 动作...

    SJTU AI1101(原AI001) 大作业-基于python和yolov5实现的简单FPS类辅助瞄准+源代码+文档说明

    程序开发过程中用于测试性能和参数的代码文件有: * `\bin\tune.py` 用于测试CS:GO(《反恐精英:全球攻势》)鼠标加速与鼠标灵敏度设置对程序参数的影响 使用的第三方模型平台有: -------- 该资源内项目源码是...

    FREEZE是一个java实体层高性能分布式存储框架

    FREEZE是一个java实体层高性能分布式存储框架,分布式存储可通过简单的配置完成,开发人员可不关心数据存储位置及数据库类型差异;支持OR自动映射;支持字段过滤查询及模糊查询;支持自定义sql语句;配置简单、代码...

    操作系统调度算法代码 操作系统磁盘调度算法java版.doc

    该实验结果表明,四种磁盘调度算法的性能存在一定的差异,但无论哪种算法,磁盘的寻道时间都是一个重要的性能指标。因此,在实际应用中,需要根据具体情况选择合适的磁盘调度算法,以提高磁盘的存取效率。

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    <br>7、 Sql模板和ORMap直接生成.cs原代码,编译为可执行代码,各种ORMap映射文件无需再随主程序集一起部署,提高了代码的安全性,提高了代码的可调试性,也提高了ORMap的性能。 <br> <br>下面三张表格...

    苹果差异隐私:苹果差异隐私实施

    本地差异特权各种本地差分隐私(LDP)技术的实现主要集中于... :warning_selector: 虽然大多数代码都已完成,但许多代码仍未记录 :warning_selector:去做 其他:文档!!! 将Apple实施与仿真框架分离到差异仓库中 Goog

    matlab图像分割肿瘤代码-instructions:收集用于在Docker容器中实现BRATS方法的支持材料

    为了进行公平的比较并评估算法之间的性能差异,您应指出在算法的训练和/或设计过程中使用的训练集,对于私有数据集,则应说明这些数据集。 Docker容器 为了确保最大的兼容性和可分发性,我们希望对Docker使用容器...

    learn-data-structures::snowflake:了解数据结构和算法,以及它们对代码简单性,复杂性和性能的影响。 :rocket:

    学习数据结构了解数据结构和算法,以及它们对代码性能的影响为什么呢?数据结构和算法在任何一种编程语言中都扮演着重要角色。更好地了解了两者之后,您可以选择最适合您的需求并极大地加快应用程序的速度。更好的...

    matlab精度检验代码-JPDA:区分性联合概率MMD(DJP-MMD)的代码

    与传统的MMD方法相比,JPDA具有更简单的形式,并且在测量不同域之间的差异方面更有效。 在六个图像分类数据集上的实验证明了JPDA的有效性。 表1中显示了Multi-PIE数据集的平均精度。在大多数任务中,JPDA优于所有...

    costas_loop代码

    % 1,costas loop在不同的应用场合(诸如,符号速率,动态应力,多谱勒,信道环境等等),其环路设计就会有非常大的差异. % 比如,在某些情况下,环路滤波的前或后,可能要进行环滤更新操作.以匹配NCO的需要.但通常的科环并不...

    Freeverb算法的Rust实现_rust_代码_下载

    与原始实现有几个(有意的)差异: 为简单起见,延迟线缓冲区是动态分配的。这可能会对性能产生影响,一旦通用常量可用,我想将缓冲区设为静态。 内部使用 64 位处理,而原始处理是 32 位。我可能会在某个时候使...

    Android应用开发之(性能优化)[收集].pdf

    有无 JIT 的设备间也存在着巨大差异,在 JIT 设备上好的代码有时候会在无JIT的设备上表现的并不好。 高效的代码有两条基本的原则:一、不作没有必要的工作;二、尽量避免内存分配。明智的优化这份文档是关于 ...

Global site tag (gtag.js) - Google Analytics