各种CLR运行时有多大?

时间:2008-11-03 19:12:06

标签: .net clr size

我正在考虑将项目迁移到托管代码,但我听说.NET运行时很大 - 实际上是我的可执行二进制文件的几倍。这就像尾巴摇着我的狗。但我也被告知,一些CLR实现(如Mono)是模块化的,您可以为它们创建一个仅包含您实际需要的部分的自定义分发。

问题是,我在Google上找到关于这个问题应该是非常简单的问题的答案非常困难。各种实现上的完整CLR包有多大,哪些支持这种模块化分发能力,以及运行时最终对于不使用大量.NET铃声的标准Windows风格(基于表单)的应用程序有多大和口哨? (我最感兴趣的是Assembly系统容易创建插件的内在能力,以及通过JIT编译将脚本编写到我的程序中的能力。)

编辑:我对安装程序大小或下载时间不感兴趣。我想知道实际框架的大小,未压缩和准备运行,因为它将在最终用户的系统上。

7 个答案:

答案 0 :(得分:2)

您可能会发现此网站很有趣。

http://www.hanselman.com/smallestdotnet/

答案 1 :(得分:1)

通常情况下,您不必担心大小,因为大多数具有正版Microsoft Windows并且设置为检索自动更新的Internet连接计算机都应安装该框架。可以肯定的是,我会推荐你​​的2.0版,因为它似乎是最受欢迎的。另外,请记住.net框架的版本(子集)较小,称为“client profile”。

还要考虑一下:如果您正在使用任何外部库(即MFC / ATL / VB运行时)?如果包括这些依赖项,您的应用程序可能会达到与.net框架相同的大小,如果不是更大。

事实上,旧系统(2000 SP4之前版本)会出现问题,但这取决于您的目标客户以及最终的目标。

稍后编辑:您可以将应用程序的安装程序设置为自动下载所需的依赖项(应用程序所需的版本),此外,您可以使用ClickOnce技术从而相对轻松地部署和维护应用程序。网站(通过提供更新)。

答案 2 :(得分:1)

我看到你想要“安装时使用的磁盘”而不是“下载大小”。这不是一个特别有用的测量方法,答案是“你基本上无法分辨”,但这是我感兴趣的数据:

在我的Windows目录中,在Microsoft.NET\Framework目录(框架都在哪里),在我的windows vista PC上,我有以下目录:

  • v1.0.3705:400 k
  • v1.1.4322:493 bytes

但请注意,我实际上并没有安装这些框架。 Vista可能只是有一些别名的兼容性。你永远不会开发使用这些版本,因为它们已经过时了(和新的东西相比,废话)

现在这里有趣。

  • 'Framework'目录本身有356 k的文件
  • v2.0.50727:152 MB
  • v3.0:10.5 MB
  • v3.5:24.7 MB

还有C:\Windows\assembly中的'全局汇编缓存',在我的电脑上运行到530 MB,但这些文件中的部分已硬连接到其他目录中,因此它们不会t count。

然而,这是误导性的,因为3.0和3.5运行在“2.0之上”,你不能自己拥有它们。

这是原始数据,但它并不像看那样的数字那么简单。

  1. 我安装了visual studio 2005和2008。这让我获得了数百MB的调试dll。

  2. 还有Microsoft Visual J# 2.0 Redistributable Package是安装visual studio的一部分,除非你使用没有人做过的J#,否则客户端PC上不需要{{1}}。那是7 MB

  3. 除了所有dll的调试副本之外,还有XML文档文件,在framework \ v2.0目录中总共69 MB

  4. 拥有Vista的任何人都已拥有v2.0和v3.0目录,除非他们还安装了.NET 3.5,否则他们的v2.0目录会相当小。除非你专门针对.NET 3.5,否则Vista上的“部署成本”就是零。

  5. 对于一些更现实的“客户端”数据,我有一台仅基于.NET 2.0安装的Windows XP SP2 PC。这是数字:

    • Windows \ Microsoft.NET \ Framework \ v2.0.50727:64 MB
    • Windows \ assembly:92 MB(注意由于硬链接而不是真的很大)

    我记得在winXP上看到了一段时间前用于.NET 2.0的'130兆字节',这听起来不错。

    现在,这听起来很多,但是这里有一些与之形成对比的数据:

    VC ++ 2008 base dll(vc,mfc,atl)是10 meg,它们对你的功能几乎没有什么帮助。当你使用任何不错的功能集构建C ++应用程序时,根据我的经验,你正在查看大约4-5兆的可执行文件和你正在发布的dll。相比之下,我之前构建的具有相对功能的.NET应用程序拥有800k的dll和可执行文件,其中大部分都是嵌入式图标和位图。

    在.NET运行时开始成为网络胜利之前,它并不需要那么多应用程序。

答案 3 :(得分:0)

Scott Hanselman对各种.NET发行版的大小及其对软件发布的影响有一个有用的blog post

答案 4 :(得分:0)

安装框架时会安装CLR运行时。如果我没记错,.NET 2.o的安装程序大小约为35-40Mb。我不确定3.0和3.5,你可以留意微软下载以获得一个想法。

框架的安装已经越来越普遍,并且由于它是其他应用程序使用的服务,因此通常不会被许多人视为应用程序占用空间的一部分。

我不知道微软版本的任何方式使其成为“模块化”

答案 5 :(得分:0)

你必须意识到每种语言都需要某种CLR。即使它是C / C ++,也取决于操作系统内置的。 Java的版本是JVM,当然还有.NET版本。如果你真的担心大小,有人联系了最小的.NET,这是一个良好的开端。

请记住,大多数人已经安装了至少.NET1.0,除非可移植性对您非常重要,否则最好只说明.NET框架是一种依赖。

答案 6 :(得分:0)

您可以查看的路线是转换为C ++的工具,例如http://www.codeplex.com/crossnet。本身并不完整或完美,但可以让你编程更高级别,然后自由.Net免费。