简单代码的性能差异

性能

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

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(string, object, object, object)
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(string, object, object, object)
L_0016: ret
}

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

时间: 2024-11-16 19:06:22

简单代码的性能差异的相关文章

一个字节造成的巨大性能差异——SQL Server存储结构

今天同事问了我一个SQL的问题,关于SQL Server内部存储结构的,我觉得挺有意思,所以写下这篇博客讨论并归纳了一下.问题是这样的: 首先我们创建两张表,一张表的列长度是4039字节,另一张表的长度是4040字节,他们就只有一个字节的差距,比如以下创建表的SQL: CREATE TABLE tb4039(c1 INT IDENTITY,c2 char(4035) not null)CREATE TABLE tb4040(c1 INT IDENTITY,c2 char(4036) not nu

大家须知简单的php性能优化注意点_php实例

什么情况,可能遇到性能问题: 1.php语法使用的不恰当 2.使用php语言做了它不擅长做的事 3.用php语言连接的服务不给力 4.php自身的短板 5.我也不知道的问题 一般情况:php性能问题不超过二分之一(一般30%~40%) php性能问题解决方向: php语言级的性能优化->php周边问题的性能优化(连接的服务,网络环境)->php语言自身分析和优化 (php语言级) 优化点:少写代码,多用php自身能力 问题:自写代码冗余较多,可读性不佳,导致性能低 为什么低:php代码需要编译

如何改进javascript代码的性能_javascript技巧

本来在那片编写可维护性代码文章后就要总结这篇代码性能文章的,耽搁了几天,本来也是决定每天都要更新一篇文章的,因为以前欠下太多东西没总结,学过的东西没去总结真的很快就忘记了,记录一下在你脑力留下更深的印象,特别是这些可维护性代码,性能什么的,当在你脑子里形成一种习惯了,那你就牛了!这里也要给初学者一个建议:多总结你学过的东西,因为这其实也是在学习新知识! 好,进入我们的主题:如何提高JS代码的性能. 1.优化DOM交互 DOM与我们的页面紧密相关,浏览器渲染页面也就是在渲染解析后的DOM元素,DO

剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)

平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种.从 epoll 发展历史来看,它刚诞生时只有 edge-trigger 模式,后来因容易产生 race-cond 且不易被开发者理解,又增加了 level-trigger 模式并作为默认处理方式. 二者的差异在于 level-trigger 模式下只要某个 fd 处于 readable/writable 状态,无论什么时候进行 epoll_

JS防止用户多次提交的简单代码

这篇文章介绍了JS防止用户多次提交的简单代码,有需要的朋友可以参考一下   复制代码 代码如下: <html> <body>  <form action="login.action" method="post">   <input type="button" name="btn" value="提交表单" onclick="return sub();&qu

Asp.net图片上传实现预览效果的简单代码

这篇文章介绍了Asp.net图片上传实现预览效果的简单代码,有需要的朋友可以参考一下   在页面上放入一个上传控件和一个图片控件. 复制代码 代码如下:  <asp:FileUpload ID="FileUpload1" runat="server" onpropertychange="show(this.value)"/>         <asp:Image ID="Image1" runat="

网页禁止鼠标左右键功能的简单代码

网页禁止鼠标左右键功能的简单代码 这个代码以前在网上找的,试用效果不错,放这里留备份,我想这个也能算是常用的代码之一了.当然啦,查看源码时鼠标肯定可以用啦,不过,有时不用想那么复杂.要求那么强大,况且源码中的代码比文本多.<script language=JavaScript> document.oncontextmenu=new Function("event.returnValue=false;"); document.onselectstart=new Functio

PHP实现只在IE浏览器显示广告简单代码

 HP实现只在IE浏览器显示广告简单代码,看下边的代码就知道了,真的很简单,这里使用了PHP的IF语句,并且使用了short_tags,服务器必须支持才可以哦. <? if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false): ?>  <!-- 在此处插入(广告)代码 -->  <? endif; ?>

原生js实现class的添加和删除简单代码_javascript技巧

实例代码: function hasClass( elements,cName ){ return !!elements.className.match( new RegExp( "(\\s|^)" + cName + "(\\s|$)") ); }; function addClass( elements,cName ){ if( !hasClass( elements,cName ) ){ elements.className += " "