博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
稍不留神产生代码垃圾
阅读量:5953 次
发布时间:2019-06-19

本文共 945 字,大约阅读时间需要 3 分钟。

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

例如:

None.gif
using System;
None.gif
None.gif
namespace testConstruct
ExpandedBlockStart.gif {
ExpandedSubBlockStart.gif    
///
 
<summary>
InBlock.gif    
///
 Class2 的摘要说明。
ExpandedSubBlockEnd.gif    
///
 
</summary>
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.gif        {
InBlock.gif
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}

 用ILDASM来看生成的IL结果:

GbCls2.JPG


        可以看到,三个构造类都重复初始化了几个变量,造成编译后程序集大小的增加。

就三个构造函数已经占了40+40+40=120 Bytes.


如果稍微修改一下,如下面所示:

None.gif
using System;
None.gif
None.gif
namespace testConstruct
ExpandedBlockStart.gif {
ExpandedSubBlockStart.gif    
///
 
<summary>
InBlock.gif    
///
 Class3 的摘要说明。
ExpandedSubBlockEnd.gif    
///
 
</summary>
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.

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

本文转自风前絮~~博客园博客,原文链接:http://www.cnblogs.com/windsails/archive/2004/09/16/43731.html,如需转载请自行联系原作者

你可能感兴趣的文章
axios 拦截 , 页面跳转, token 验证(自己摸索了一天搞出来的)
查看>>
有序的双链表
查看>>
程序员全国不同地区,微信(面试 招聘)群。
查看>>
【干货】界面控件DevExtreme视频教程大汇总!
查看>>
闭包 !if(){}.call()
查看>>
python MySQLdb安装和使用
查看>>
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>