2010-01-26 13 views
10

J'ai lu régulièrement que le framework est juste trop grand pour qu'un développeur ait de l'expérience avec chaque partie de celui-ci. Avoir des chiffres réels aiderait certainement à mettre les choses en perspective. MSDN semble tous les énumérer mais il n'y a pas de nombres réels (d'après ce que j'ai pu voir) et les heures de comptage ne sont pas mon idée de temps productif.Quelle est la taille exacte de la bibliothèque de classes de framework .NET (3.5)?

  • Nombre d'espaces de noms
  • Nombre de classes
  • Nombre de Structs
  • Nombre d'interfaces

Je sais qu'il ya aussi des délégués, énumérations, événements, etc, mais les types ci-dessus sont de plus d'intérêt.

En outre, le nombre de types dans la Bibliothèque de classes de base (BCL) ainsi que la taille de la bibliothèque de classes de structure générale (FCL) seraient intéressants.

Cette information serait utile de 2 façons:

Tout d'abord, pour obtenir une poignée sur la façon dont une grande partie du cadre général que vous avez effectivement travaillé avec et combien vous avez encore à apprendre. Deuxièmement, de nombreux programmeurs d'autres plates-formes (et des personnes non-techniques) sont souvent surpris qu'un programmeur puisse passer le plus clair de son temps dans le ".NET Framework". Avoir quelques chiffres aiderait certainement à expliquer pourquoi ce n'est pas une indication de compétences/expérience étroites.

[Mise à jour]

En utilisant le code d'Andrew (sur mon .NET 3.5 système SP1) Je reçois:

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

L'analyse rapide de .NET 4.0 de Patric Smacchia pourrait vous intéresser: http://codebetter.com/blogs/patricksmacchia/archive/2009/05/21/a-quick-analyze-of-the-net-fx -v4-0-beta1.aspx –

+0

je compile le code d'Andrew dans VS2010: classess: 12704 Types de valeur: 4416 Interface: 1287 – AminM

Répondre

6

Ces 2 messages blog abordent ce sujet:

Les résultats sont ventilé par nombre d'assemblées, espaces de noms, types, membres et autres éléments.

+0

+1 Excellents liens, exactement ce que vous recherchez. – Ash

5

Vous pouvez utiliser la réflexion pour trouver le nombre de différents types dans la BCL, mais ce sont vous espérez accomplir avec cette information?

Voici un exemple de la façon d'obtenir cette information:

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

Notez juste que vous devez faire pour chaque assemblée dans le cadre pour obtenir le nombre total.

Edit: Voici une solution rapide et sale qui devrait vous donner une idée générale du nombre de types dans la 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) Obtenez une idée de la meilleure façon d'apprendre de nouvelles zones (à moi au moins) du cadre. 2) Expliquer aux programmeurs non-NET et aux non-techniciens la taille de .NET et pourquoi il est possible de travailler entièrement dans les limites de .NET. – Ash

+0

Ceci est une métrique intéressante. +1 pour l'algorithme de sommation. Mais ces chiffres ne peuvent devenir intéressants que si vous pouvez déterminer combien de FCL vous connaissez et comment peut-on pratiquement quantifier cela? par exemple. Un inventaire de la section .Net de votre propre matière grise. ;-p –

+0

+1 Belle mise à jour du code, je vais l'essayer. Je n'ai jamais utilisé RuntimeEnvironment avant, intéressant à savoir. – Ash

0

Il est si grand que personne ne sait vraiment sa taille?

En ce qui concerne la taille des fichiers, sur mon système, les frameworks 2.0, 3.0 et 3.5 occupent environ 130 Mo d'espace disque, et les versions 64 bits prennent environ 93 Mo. Mais ce n'est pas compter les choses qui sont au cœur de Win7 lui-même.

2

Je ne l'ai pas utilisé moi-même, mais je pense que c'est le genre d'information que NDepend peut vous fournir.

0

Il est un peu difficile de répondre sans avoir une définition de ce que «grand» signifie - IL (.dll) taille? Taille du code source? Portée de la fonctionnalité? Par ailleurs, parlez-vous du redistribuable le plus récent de 3.5 SP1 sans aucun des add-ons officiels (c'est-à-dire F #, MVC, etc.) qui sont des parties entièrement supportées du 'framework' mais qui ne sont pas livrés avec 3.5 redistribuable? Je n'essaie pas d'être difficile ... Je dis juste qu'il y a quelques variables qui entrent dans la façon dont on pourrait même déterminer ce qui doit être mesuré, puis quelques questions sur quel type de bâton est utilisé pour mesurer il.

+0

Comme je le dis dans la question, la version 3.5 de la FCL (y compris la BCL). Je définis la taille comme le nombre d'espaces de noms, de classes, de structures et d'interfaces. – Ash