2010-01-26 9 views
10

Ich habe regelmäßig gelesen, dass das Framework einfach zu groß ist, als dass ein Entwickler Erfahrung mit jedem Teil davon hätte. Ein paar tatsächliche Zahlen würden sicherlich dazu beitragen, die Dinge ins rechte Licht zu rücken.Wie groß ist die .NET (3.5) Framework-Klassenbibliothek?

MSDN scheint sie alle aufzulisten, aber es gibt keine tatsächlichen Zahlen (von dem, was ich sehen konnte) und Stunden zu zählen, ist nicht meine Vorstellung von produktiver Zeit.

  • Anzahl der Namensräume
  • Anzahl der Klassen
  • Anzahl der Structs
  • Anzahl der Schnittstellen

ich es erkennen sind auch die Delegierten, Aufzählungen, Veranstaltungen, etc, aber die oben genannten Arten sind von größtem Interesse.

Auch die Anzahl der Typen in der Basisklassenbibliothek (BCL) sowie die Größe der gesamten Framework Class Library (FCL) wäre interessant.

würden diese Informationen auf 2 Arten nützlich sein:

Zur einem Griff, wie viel Sie von dem Gesamtrahmen mit tatsächlich gearbeitet haben, zu bekommen und wie viel Sie noch lernen müssen.

Zweitens sind viele Programmierer von anderen Plattformen (und Nicht-Techniker) oft überrascht, dass ein Programmierer die meiste Zeit im ".NET Framework" verbringen kann. Einige Zahlen würden sicherlich erklären, warum dies kein Hinweis auf enge Fähigkeiten/Erfahrungen ist.

[Update]

Andrews Code verwenden (auf meinem .NET 3.5 SP1-System) erhalte ich:

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

Sie könnten sich für die schnelle Analyse von .NET 4.0 von Patric Smacchia interessieren: http://codebetter.com/blogs/patricksmacchia/archive/2009/05/21/a-quick-analyze-of-the-net-fx -v4-0-beta1.aspx –

+0

Ich kompiliere Andrew's Code in VS2010: classes: 12704 Werttypen: 4416 Interface: 1287 – AminM

Antwort

6

diesen 2 Blog-Beiträge adressieren dieses Thema:

Ergebnisse sind aufgeschlüsselt nach Anzahl der Assemblys, Namespaces, Typen, Members und anderer Elemente.

+0

+1 Ausgezeichnete Links, genau das, was gesucht wurde. – Ash

5

könnten Sie Reflexion verwenden, um die Anzahl unterschiedlicher Typen in der BCL zu finden, aber was ist Sie hoffen, mit dieser Information zu erreichen? Hier

ist ein Beispiel dafür, wie diese Informationen zu erhalten:

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

Nur beachten Sie, dass Sie für jede Baugruppe im Rahmen dies tun, müssen Gesamtzahl zu bekommen.

Edit: Hier ist eine schnelle und schmutzige Lösung, die Ihnen einen Überblick über die Anzahl der Arten in der BCL geben soll:

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) Holen Sie sich eine Vorstellung davon, wie Sie am besten neue Bereiche (zumindest für mich) des Frameworks lernen. 2) Erläutern Sie Nicht-.NET-Programmierern und Nicht-Technikern, wie groß .NET ist und warum es möglich ist, vollständig innerhalb von .NET zu arbeiten. – Ash

+0

Dies ist eine interessante Metrik. +1 für den Summierungsalgorithmus. Aber diese Zahlen können nur interessant werden, wenn Sie dann herausfinden können, wie viel von der FCL Sie wissen und wie könnte man das praktisch quantifizieren? z.B. Ein Inventar des .Net-Bereichs Ihrer eigenen grauen Substanz. ;-p –

+0

+1 Schönes Update auf den Code, ich werde es ausprobieren. Ich habe RuntimeEnvironment vorher nicht verwendet, interessant zu wissen. – Ash

0

Es ist so groß, dass niemand seine Größe wirklich weiß?

Soweit die Dateigröße geht, nehmen auf meinem System die 2.0, 3.0 und 3.5 Frameworks rund 130 MB Speicherplatz, und die 64-Bit-Versionen nehmen etwa 93 MB. Aber das zählt nicht die Dinge, die Win7 selbst ausmachen.

2

Ich habe es nicht selbst verwendet, aber ich denke, das ist die Art von Informationen, die Ihnen NDepend bieten kann.

0

Es ist ein bisschen schwierig zu beantworten, ohne eine Definition dessen zu haben, was "groß" bedeutet - IL (.dll) Größe? Quellcode-Größe? Funktionsumfang? Sprechen Sie auch über die neueste Version von 3.5 SP1 ohne die offiziellen Add-Ons (also F # stuff, MVC, etc.), die vollständig vom "Framework" unterstützt werden, aber nicht mit dem 3.5 verteilbar?

Ich versuche nicht, schwierig zu sein ... Ich sage nur, dass es einige Variablen gibt, die sich darauf beziehen, wie man überhaupt bestimmen würde, was gemessen werden soll, dann einige Fragen darüber, welche Art von Messstab verwendet wird es.

+0

Wie ich in der Frage sage, Version 3.5 der FCL (einschließlich der BCL). Ich definiere Größe als die Anzahl der Namespaces, Klassen, Strukturen und Schnittstellen. – Ash