.NET(3.5)框架类库到底有多大?
我经常读到,这个框架太大了,一个开发人员无法体验它的每一部分。有一些实际数字肯定会有助于正确看待问题 MSDN似乎列出了所有这些,但没有实际的数字(从我所看到的),花几个小时计算它们并不是我的生产时间概念.NET(3.5)框架类库到底有多大?,.net,base-class-library,.net,Base Class Library,我经常读到,这个框架太大了,一个开发人员无法体验它的每一部分。有一些实际数字肯定会有助于正确看待问题 MSDN似乎列出了所有这些,但没有实际的数字(从我所看到的),花几个小时计算它们并不是我的生产时间概念 名称空间的数目 班级数 结构数 接口数量 我知道也有委托、枚举、事件等,但上面的类型最有意思 此外,基类库(BCL)中类型的数量以及整个框架类库(FCL)的大小也很有趣 这些信息有两种用途: 首先,了解您实际使用了多少总体框架,还有多少需要学习 第二,许多来自其他平台的程序员(以及非技术人
- 名称空间的数目
- 班级数
- 结构数
- 接口数量
接口:1296您可以使用反射来查找BCL中不同类型的数量,但是您希望用这些信息实现什么 以下是如何获取该信息的示例:
using System;
using System.Linq;
using System.Reflection;
class Example
{
static void Main()
{
Assembly mscorlib = typeof(String).Assembly;
// Number of classes
Console.WriteLine(mscorlib.GetTypes().Where(t => t.IsClass).Count());
// Number of value types (structs and enums)
Console.WriteLine(mscorlib.GetTypes().Where(t => t.IsValueType).Count());
// Number of interfaces
Console.WriteLine(mscorlib.GetTypes().Where(t => t.IsInterface).Count());
}
}
请注意,您需要对框架中的每个程序集执行此操作,以获得总数
编辑:这里有一个快速而肮脏的解决方案,可以让您大致了解BCL中的类型数量:
using System;
using System.Linq;
using System.Reflection;
using System.IO;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Get all DLLs in the current runtime directory
var assemblies = Directory.GetFiles(
RuntimeEnvironment.GetRuntimeDirectory())
.Where(f => f.EndsWith(".dll"));
Int32 classes = 0;
Int32 valueTypes = 0;
Int32 interfaces = 0;
foreach (String name in assemblies)
{
// We need to catch BadImageFormatException
// because not all DLLs in the runtime directory
// are CLR assemblies.
try
{
var types = Assembly.LoadFile(name).GetTypes();
classes += types.Where(t => t.IsClass).Count();
valueTypes += types.Where(t => t.IsValueType).Count();
interfaces += types.Where(t => t.IsInterface).Count();
}
catch (BadImageFormatException) { }
}
Console.WriteLine("Classes: {0}", classes);
Console.WriteLine("Value types: {0}", valueTypes);
Console.WriteLine("Interfaces: {0}", interfaces);
}
}
它如此之大以至于没有人真正知道它的大小
就文件大小而言,在我的系统上,2.0、3.0和3.5框架占用大约130MB的磁盘空间,而64位版本占用大约93MB的磁盘空间。但这还不包括Win7本身的核心内容。我自己没有使用过它,但我认为这是可以提供给您的信息。这两篇博文阐述了这个主题:
- Brad Abrams:(显示不同框架版本的数字)
- 帕特里克·斯马奇亚:(使用独立软件)
结果按程序集、名称空间、类型、成员和其他项的数量进行细分。如果不定义“大”的含义--IL(.dll)大小,就有点难以回答?源代码大小?功能范围?另外,您是否在谈论最近的3.5 SP1可再发行版本,而没有任何官方附加组件(即F#stuff、MVC等),它们是“框架”的完全支持部分,但不随3.5可再发行版本一起提供
我不想变得困难。。。我只是说,有几个变量甚至可以用来决定要测量什么,然后是关于用什么样的棍子来测量它的一些问题。1)了解如何最好地学习框架的新领域(至少对我而言)。2) 向非.NET程序员和非技术人员解释.NET有多大,以及为什么可以完全在.NET范围内工作。这是一个有趣的指标+1表示求和算法。但这些数字只有在你能弄清楚你知道多少FCL以及如何实际量化的情况下才会变得有趣?e、 g.你自己灰质的.Net部分的清单-p+1对代码进行了很好的更新,我将尝试一下。我以前没有使用过RuntimeEnvironment,这很有趣。以下是我在系统中得到的信息:类:12688值类型:4438接口:1296您可能对Patric Smacchia对.NET 4.0的快速分析感兴趣:我在VS2010中编译了Andrew的代码:类:12704值类型:4416接口:1287正如我在问题中所说的,FCL第3.5版(包括BCL)。我将大小定义为名称空间、类、结构和接口的数量。
using System;
using System.Linq;
using System.Reflection;
using System.IO;
using System.Runtime.InteropServices;
class Example
{
static void Main()
{
// Get all DLLs in the current runtime directory
var assemblies = Directory.GetFiles(
RuntimeEnvironment.GetRuntimeDirectory())
.Where(f => f.EndsWith(".dll"));
Int32 classes = 0;
Int32 valueTypes = 0;
Int32 interfaces = 0;
foreach (String name in assemblies)
{
// We need to catch BadImageFormatException
// because not all DLLs in the runtime directory
// are CLR assemblies.
try
{
var types = Assembly.LoadFile(name).GetTypes();
classes += types.Where(t => t.IsClass).Count();
valueTypes += types.Where(t => t.IsValueType).Count();
interfaces += types.Where(t => t.IsInterface).Count();
}
catch (BadImageFormatException) { }
}
Console.WriteLine("Classes: {0}", classes);
Console.WriteLine("Value types: {0}", valueTypes);
Console.WriteLine("Interfaces: {0}", interfaces);
}
}