C# 为什么编译文件的大小会减小?

C# 为什么编译文件的大小会减小?,c#,windows-services,C#,Windows Services,我对我的项目WindowsService做了一些修改。以前是56kb。但是经过修改后,它的大小减小到了54kb。实际上修改增加了编码的数量,那么为什么大小会减小呢?关于这个特性,你知道吗?如果你在看可执行文件的大小,那是因为元信息的大小变了 如果像TaskMgr一样查看内存中的大小,那么可能是因为它的执行与运行时历史记录略有不同。如果查看可执行文件的大小,则是因为元信息的大小发生了更改 如果像TaskMgr一样查看内存中的大小,可能是因为运行时历史记录导致它的执行略有不同。不需要mata信息。剖

我对我的项目WindowsService做了一些修改。以前是56kb。但是经过修改后,它的大小减小到了54kb。实际上修改增加了编码的数量,那么为什么大小会减小呢?关于这个特性,你知道吗?如果你在看可执行文件的大小,那是因为元信息的大小变了


如果像TaskMgr一样查看内存中的大小,那么可能是因为它的执行与运行时历史记录略有不同。

如果查看可执行文件的大小,则是因为元信息的大小发生了更改


如果像TaskMgr一样查看内存中的大小,可能是因为运行时历史记录导致它的执行略有不同。

不需要mata信息。剖面对齐可能已发生变化(当然,这包括元对齐)。使用DUMPBIN命令检查节大小,以便比较新旧可执行文件

它可以是内联优化。若编译器选择该方法对于内联优化来说太大,那个么它不会在每次调用时都复制代码。这将减少文件大小


VC使用512字节对可执行文件进行四舍五入。因此,删除一个字符串可以减少文件大小512字节(如果幸运的话)

不需要mata信息。剖面对齐可能已发生变化(当然,这包括元对齐)。使用DUMPBIN命令检查节大小,以便比较新旧可执行文件

它可以是内联优化。若编译器选择该方法对于内联优化来说太大,那个么它不会在每次调用时都复制代码。这将减少文件大小


VC使用512字节对可执行文件进行四舍五入。因此,删除一个字符串可以减少文件大小512字节(如果幸运的话)

在C#代码行和为它们生成的IL之间没有明显的相关性。特别是匿名方法,lambdas、迭代器和Linq查询在C#中非常紧凑,但会生成大量IL。您必须使用ildasm.exe才能找到问题的根源。如果你真的想知道

在C#代码行和为它们生成的IL之间没有明显的相关性。特别是匿名方法,lambdas、迭代器和Linq查询在C#中非常紧凑,但会生成大量IL。您必须使用ildasm.exe才能找到问题的根源。如果你真的想知道

您在源代码中所做的更改本质上会生成更小的机器代码,或者编译时选项可能已经更改


或者,文件系统可能会根据占用的块数对齐文件。

您在源代码中所做的更改会生成更小的机器代码,或者编译时选项可能已更改


或者,文件系统可能会根据占用的块数来调整文件。

我的问题是,为什么会因为使用了较少的昂贵结构而减小文件大小?我不知道,你忘了说你更改了什么。我正在将一些属性从一个具有installer类的服务发送到另一个WindowsService,该服务可以在services.msc中看到,该服务没有installer类,由另一个具有installer类的serverservice内部调用Peter,nobugz的观点是,您可能删除了两行解析为十行IL的代码,而添加了五行解析为五行IL的代码,从而净减少了文件大小。在更改之前和之后评估IL以找出答案。不,我没有删除任何一行代码这就是有趣的事情我的问题是为什么尺寸会减小,因为您使用的那些昂贵的构造更少?我不知道,你忘了说你更改了什么。我正在将一些属性从一个具有installer类的服务发送到另一个WindowsService,该服务可以在services.msc中看到,该服务没有installer类,由另一个具有installer类的serverservice内部调用Peter,nobugz的观点是,您可能删除了两行解析为十行IL的代码,而添加了五行解析为五行IL的代码,从而净减少了文件大小。在更改前后评估IL以找出答案。不,我没有删除任何一行代码这就是有趣的事情我的问题是为什么尺寸减小我的问题是为什么尺寸减小我的问题是为什么尺寸减小我的问题是为什么尺寸减小而没有看到代码,甚至没有看到更改,不可能确定。如果没有看到代码,甚至更改,就不可能确定。