2010-01-26 15 views
10

ja regularnie czytać, że ramy jest po prostu zbyt duży dla jednej deweloper mieć doświadczenie z każdej części. Posiadanie pewnych rzeczywistych liczb z pewnością pomoże w perspektywie.Dokładnie jak duża jest biblioteka klasy .NET (3.5)?

MSDN wydaje się je wszystkie wymienić, ale nie istnieją żadne rzeczywiste numery (z tego co widziałem) i spędzać czas ich liczenia nie jest mój pomysł od czasu produkcyjnego.

  • Liczba Namespaces
  • liczba klas
  • Ilość elemencie
  • Ilość złączy

Zdaję sobie sprawę, istnieją również delegaci, teksty stałe, wydarzenia, itp, ale powyższe typy są najbardziej interesujące.

Również liczba typów w Class Library bazowej (BCL), jak również wielkości ogólnej Framework Class Library (FCL) byłoby interesujące.

Ta informacja będzie przydatna na 2 sposoby:

Po pierwsze, aby uzyskać uchwyt na ile ogólnej ramy zostały faktycznie pracował z i ile trzeba jeszcze nauczyć.

Po drugie, wielu programistów z innych platform (i osób nietechnicznych) są często zaskoczeni, że programista może spędzić większość swojego czasu w „.NET Framework”. Posiadanie pewnej liczby z pewnością pomogłoby wyjaśnić, dlaczego nie świadczy to o wąskich umiejętnościach/doświadczeniu.

[Aktualizacja]

Korzystanie kod Andrzeja (na moim .NET 3.5 systemu SP1) pojawia się:

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

Możesz być zainteresowany Szybką analizą Patric Smacchii dla .NET 4.0: http://codebetter.com/blogs/patricksmacchia/archive/2009/05/21/a-quick-analyze-of-the-net-fx -v4-0-beta1.aspx –

+0

Kompiluję kod Andrew w VS2010: klasy: 12704 Typy wartości: 4416 Interfejs: 1287 – AminM

Odpowiedz

5

Można użyć refleksji znaleźć wiele różnych typów w plc ale jakie są masz nadzieję osiągnąć te informacje?

Oto przykład, w jaki sposób uzyskać te informacje:

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

Wystarczy pamiętać, że trzeba będzie to zrobić dla każdego zespołu w ramach dostać sumę liczb.

Edit: Oto szybki i brudny rozwiązanie, które powinno dać ogólne pojęcie o liczbie typów w 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) Zobacz, jak najlepiej nauczyć się nowych obszarów (przynajmniej dla mnie) w ramach. 2) Wyjaśnij programistom spoza sieci .NET i osobom nietechnicznym, jak duży jest .NET i dlaczego można pracować całkowicie w ramach .NET. – Ash

+0

To interesujący wskaźnik. +1 dla algorytmu sumowania. Ale te liczby mogą stać się interesujące tylko wtedy, gdy będziesz w stanie określić, ile FCL znasz i jak można to praktycznie obliczyć? na przykład Inwentarz sekcji .Net twojej szarej materii. ;-p –

+0

+1 Dobra aktualizacja kodu, wypróbuję to. Nie korzystałem wcześniej z RuntimeEnvironment, co warto wiedzieć. – Ash

0

jest tak duża, że ​​nikt naprawdę zna jego wielkość?

Jeśli chodzi o rozmiar pliku idzie, w moim systemie Ramy 2,0, 3,0 i 3,5 potrwać około 130MB wolnego miejsca na dysku, a wersje 64-bitowe wziąć w przybliżeniu 93MB. Ale to nie liczy rzeczy, które są kluczowe dla samego Win7.

2

Nie używałem go samodzielnie, ale myślę, że jest to rodzaj informacji, które NDepend może dostarczyć do Ciebie.

0

Trudno jest odpowiedzieć bez definicji tego, co "duże" oznacza - IL (.dll) rozmiar? Rozmiar kodu źródłowego? Zakres funkcjonalności? Czy mówisz również o najnowszym redystrybuowalnym pakiecie 3.5 SP1 bez żadnych oficjalnych dodatków (tj. Z F # stuff, MVC itp.), Które są w pełni wspieranymi częściami "frameworka", ale nie są dostarczane z 3.5 redystrybucja?

Nie próbuję być trudny ... Mówię tylko, że jest kilka zmiennych, które decydują o tym, co można zmierzyć, a następnie kilka pytań o to, jaki rodzaj sztyftu jest używany do pomiaru. to.

+0

Jak mówię w pytaniu, wersja 3.5 FCL (w tym BCL). Definiuję rozmiar jako liczbę przestrzeni nazw, klas, struktur i interfejsów. – Ash