稍不留神,可能就使你的代码编译后产生了好多不必要的垃圾

转载 2004年09月16日 17:05:00
一个类型允许定义多个实例构造器,在使用过程中确实是十分方便的。但是,在定义这些构造器时,如果稍不留神,可能就使你的代码编译后产生了好多不必要的垃圾,增加了程序集的大小,也不够简洁。

例如:

None.gifusing System;
None.gif
None.gif
namespace testConstruct
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif    
/// 
InBlock.gif    
/// Class2 的摘要说明。
ExpandedSubBlockEnd.gif    
/// 

InBlock.gif    public class Class2
ExpandedSubBlockStart.gif    
{
InBlock.gif        Int32 x 
= 6;
InBlock.gif        String s 
= "Hello";
InBlock.gif        Double d 
= 3.24;
InBlock.gif        Byte b;
InBlock.gif        
public Class2()
ExpandedSubBlockStart.gif        
{
InBlock.gif            
//
InBlock.gif            
// TODO: 在此处添加构造函数逻辑
InBlock.gif            
//
ExpandedSubBlockEnd.gif
        }

InBlock.gif
InBlock.gif        
public Class2(Int32 x)
ExpandedSubBlockStart.gif        
{
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public Class2(String s)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

 用ILDASM来看生成的IL结果:
GbCls2.JPG

        可以看到,三个构造类都重复初始化了几个变量,造成编译后程序集大小的增加。
就三个构造函数已经占了40+40+40=120 Bytes.

如果稍微修改一下,如下面所示:
None.gifusing System;
None.gif
None.gif
namespace testConstruct
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif    
/// 
InBlock.gif    
/// Class3 的摘要说明。
ExpandedSubBlockEnd.gif    
/// 

InBlock.gif    public class Class3
ExpandedSubBlockStart.gif    
{
InBlock.gif        Int32 x 
= 6;
InBlock.gif        String s 
= "Hello";
InBlock.gif        Double d 
= 3.24;
InBlock.gif        Byte b;
InBlock.gif        
public Class3()
ExpandedSubBlockStart.gif        
{
InBlock.gif            
//
InBlock.gif            
// TODO: 在此处添加构造函数逻辑
InBlock.gif            
//
ExpandedSubBlockEnd.gif
        }

InBlock.gif
InBlock.gif        
public Class3(Int32 x) : this()
ExpandedSubBlockStart.gif        
{
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public Class3(String s) : this()
ExpandedSubBlockStart.gif        
{
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif


再用ILDASM来看产生的IL结果:
GbCls3.JPG

可见生成的程序集大小确实减少了不少。现在三个构造函数才占了40+7+7=54 Bytes.

就三个构造函数的代码而言,大小缩减了一半不止。

解决问题:当前命令发生了严重错误。应放弃任何可能产生的结果

最近程序突然死循环,一查问题.发现出现了如题错误.最后找出的结果是在调用存储过程中未指明详细的数据类型.(据google结果说打了sp4才出现的,这就不知道了)对程序修改:SqlParameter p...
  • wthorse
  • wthorse
  • 2006年09月04日 12:45
  • 4742

atitit.故障排除--- 当前命令发生了严重错误。应放弃任何可能产生的结果sql server 2008

atitit.故障排除--- 当前命令发生了严重错误。应放弃任何可能产生的结果sql server 2008   1. 现象 1 2. 原因:::sql server的bug 或者限制,查询的时...
  • attilax
  • attilax
  • 2014年11月26日 20:23
  • 6695

当前命令发生了严重错误,应放弃任何可能产生的结果的解决办法

上次原来只有装vs2003时,在调精品OA没有问题,后来装了VS2005就不行了,难道装了VS2005就不行了吗后来网上找办法,听说好象是装SP4 补丁的后出现错误,卸载SQL 2000,重装没装SP...
  • sendling
  • sendling
  • 2007年08月24日 15:09
  • 3722

SqlException 当前命令发生了严重错误 应放弃任何可能产生的结果

今天在信息发布功能时出现了一个怪异的错误(时而出错,时而不会): System.Data.SqlClient.SqlException: 当前命令发生了严重错误。应放弃任何可能产生的结果。 ...
  • linsentong
  • linsentong
  • 2016年06月28日 20:59
  • 1220

解决"当前命令发生了严重错误。应放弃任何可能产生的结果。"的问题

在对新闻进行更新时,突然出现“当前命令发生了严重错误。应放弃任何可能产生的结果。”的错误。不知道为什么,经过测试发现,是因为修改的内容过长造成的。上网查了一下。解决的方法很简单,就是在cmd.Para...
  • chenguang79
  • chenguang79
  • 2008年05月27日 11:23
  • 2927

你当我想写“垃圾代码”吗?

转载请注明出处:王亟亟的大牛之路先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android 最近会把收纳库的结构重新编排下(因为现在里面...
  • ddwhan0123
  • ddwhan0123
  • 2016年07月24日 10:48
  • 4339

我又回来了,希望这次能坚持写下去,不再半途而废了

博主在之前读大学的时候也尝试着写过博客,但每次没过多久就放弃了。为什么呢?没有坚持下去的毅力,希望这次能坚持下去。舍友和同学在坚持着,进步也看的见,为什么别人能做到,我做不到呢!加油,坚持下去。 如...
  • qq_17566051
  • qq_17566051
  • 2018年01月13日 21:22
  • 20

遇到了你,我知足了

遇到了你,有了你,于是我就拥有了一份快乐。在这孤独的人生旅程中,能够相识你,相知你,有了你,我感动着,快乐着,你成了我幸福的源泉,成了我今生今世的思缘。生活是平静的,有你一起书写着这份平静,却又生出了...
  • u014543744
  • u014543744
  • 2014年04月04日 15:55
  • 60

vs清理垃圾的脚本

在工程目录下新建一个记事本文件,将下面代码以vsclear.bat为文件名保存,直接双击运行@echo off @for /r %%i in ( *.aps *.idb *.ncb *.obj *.p...
  • tianxiayijia1998
  • tianxiayijia1998
  • 2016年10月06日 16:57
  • 366

proc文件系统探索 之 以数字命名的目录

在proc根目录下,以数字命名的目录表示当前一个运行的进程,目录名即为进程的pid。其内的目录和文件给出了一些关于该进程的信息。niutao@niutao-desktop:/proc/6584$ ls...
  • ctthunagchneg
  • ctthunagchneg
  • 2014年12月28日 02:25
  • 1851
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:稍不留神,可能就使你的代码编译后产生了好多不必要的垃圾
举报原因:
原因补充:

(最多只允许输入30个字)