2010-01-26 35 views
10

He leído regularmente que el marco es demasiado grande para que un desarrollador tenga experiencia con cada parte del mismo. Tener algunos números reales ciertamente ayudaría a poner las cosas en perspectiva.¿Exactamente qué tan grande es la .NET (3.5) Framework Class Library?

MSDN parece enumerarlos todos, pero no hay números reales (por lo que pude ver) y pasar horas contándolos no es mi idea de tiempo productivo.

  • Número de espacios de nombres
  • Número de Clases
  • Número de Structs
  • número de interfaces

me di cuenta que también son delegados, enumeraciones, eventos, etc, pero lo anterior tipos son de mayor interés.

Además, el número de tipos en la Biblioteca de clases base (BCL), así como el tamaño de la Biblioteca de clases de marco general (FCL) sería interesante.

Esta información sería útil en 2 formas:

En primer lugar, para tener una idea de cómo gran parte del marco general que realmente han trabajado y lo mucho que todavía tiene que aprender.

En segundo lugar, muchos programadores de otras plataformas (y personas no técnicas) a menudo se sorprenden de que un programador pueda pasar la mayor parte de su tiempo dentro del ".NET Framework". Tener algunos números ciertamente ayudaría a explicar por qué esto no es una indicación de habilidades/experiencia estrechas.

[Actualización]

Mediante el código de Andrew (en mi sistema SP1 .NET 3.5) me sale:

Classes: 12688 
Value types: 4438 
Interfaces: 1296
+1

Puede que le interese el Análisis rápido de .NET 4.0 de Patric Smacchia: http://codebetter.com/blogs/patricksmacchia/archive/2009/05/21/a-quick-analyze-of-the-net-fx -v4-0-beta1.aspx –

+0

compilo el código de Andrew en VS2010: classess: 12704 Value Types: 4416 Interface: 1287 – AminM

Respuesta

6

Estas 2 entradas de blog abordar este tema:

Los resultados son desglosado por cantidad de ensamblajes, espacios de nombres, tipos, miembros y otros elementos.

+0

+1 Enlaces excelentes, exactamente lo que estaba buscando. – Ash

5

Se podría utilizar la reflexión para encontrar el número de diferentes tipos en el BCL pero ¿cuáles son ¿Esperas lograr con esa información?

Aquí es un ejemplo de cómo obtener esa información:

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()); 
    } 
} 

Ten en cuenta que tendrá que hacer esto para cada montaje en el marco de conseguir cifras totales.

Editar: Aquí es una solución rápida y sucia que debe darle una idea general de la cantidad de tipos en el 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); 
    } 
} 
+0

1) Haga una idea de la mejor manera de aprender nuevas áreas (al menos para mí) del framework. 2) Explique a los programadores que no pertenecen a .NET y a personas no técnicas qué tan grande es .NET y por qué es posible trabajar completamente dentro de los límites de .NET. – Ash

+0

Esta es una medida interesante. +1 para el algoritmo de suma. Pero estos números solo pueden volverse interesantes si luego puedes averiguar qué cantidad de FCL conoces y cómo podría uno prácticamente cuantificar eso. p.ej. Un inventario de la sección .Net de su propia materia gris. ;-p –

+0

+1 Buena actualización del código, lo probaré. No he usado RuntimeEnvironment antes, es interesante saberlo. – Ash

0

Es tan grande que nadie sabe realmente su tamaño?

En lo que respecta al tamaño del archivo, en mi sistema los marcos 2.0, 3.0 y 3.5 ocupan alrededor de 130MB de espacio en disco, y las versiones de 64 bits toman aproximadamente 93MB. Pero eso no cuenta las cosas que son esenciales para Win7.

2

No lo he usado, pero creo que este es el tipo de información que NDepend puede proporcionarle.

0

Es un poco difícil de responder sin tener una definición de lo que significa 'grande' - tamaño IL (.dll)? Tamaño del código fuente? Alcance de la funcionalidad? Además, ¿está hablando de la redistribución más reciente de 3.5 SP1 sin ninguno de los complementos oficiales (es decir, material F #, MVC, etc.) que son partes completamente compatibles del 'marco' pero que no se incluyen con el 3.5 redistribuible?

No estoy tratando de ser difícil ... Solo digo que hay algunas variables que explican cómo uno podría determinar lo que se va a medir, y luego algunas preguntas sobre qué tipo de palo se usa para medir eso.

+0

Como digo en la pregunta, la versión 3.5 de la FCL (incluido el BCL). Estoy definiendo el tamaño como la cantidad de espacios de nombres, clases, estructuras e interfaces. – Ash