2010-01-26 3 views
10

Я регулярно читал, что структура слишком велика для того, чтобы один разработчик мог иметь опыт работы с каждой его частью. Наличие некоторых фактических чисел, несомненно, поможет поставить вещи в перспективе.Насколько велика библиотека классов классов .NET (3.5) Framework?

MSDN, кажется, перечисляет их все, но нет фактических чисел (из того, что я мог видеть), и расходование часов, считая их, не является моей идеей продуктивного времени.

  • Количество Namespaces
  • Количество классов
  • Количество структур
  • Количество интерфейсов

Я понимаю, что есть также делегатов, перечислений, события и т.д., но выше типов представляют наибольший интерес.

Также было бы интересно количество типов в библиотеке базового класса (BCL), а также размер общей библиотеки классов классов классов (FCL).

Эта информация будет полезна в 2 способами:

Во-первых, чтобы получить ручку на то, сколько общих рамок вы на самом деле работал и сколько еще предстоит узнать.

Во-вторых, многие программисты с других платформ (и нетехнических людей) часто удивляются тому, что программист может провести большую часть своего времени в рамках «.NET Framework». Наличие некоторых цифр, несомненно, поможет объяснить, почему это не указывает на узкие навыки/опыт.

[Update]

Использование кода Эндрю (на моей системе .NET 3.5 SP1) я получаю:

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

Возможно, вас заинтересует быстрый анализ Patric Smacchia .NET 4.0: http://codebetter.com/blogs/patricksmacchia/archive/2009/05/21/a-quick-analyze-of-the-net-fx -v4-0-beta1.aspx –

+0

i компиляция кода Андрея в VS2010: classess: 12704 Типы значений: 4416 Интерфейс: 1287 – AminM

ответ

6

Эти 2 сообщений в блоге решить эту тему:

Результаты с разбивкой по количеству сборок, пространств имен, типов, элементов и других элементов.

+0

+1 Отличные ссылки, именно то, что искали. – Ash

5

Вы можете использовать отражение, чтобы найти число различных типов в 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()); 
    } 
} 

Сразу отметим, что вам нужно будет сделать это для каждого узла в рамках, чтобы получить общее число.

Edit: Вот быстрое и грязное решение, которое должно дать вам общее представление о количестве типов в 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) Подумайте о том, как лучше всего изучить новые области (по крайней мере, для меня). 2) Объясните не.NET-программистам и нетехническим людям, насколько велик .NET и почему можно работать полностью в рамках .NET. – Ash

+0

Это интересная метрика. +1 для алгоритма суммирования. Но эти цифры могут стать интересными только тогда, когда вы сможете выяснить, сколько из FCL вы знаете, и как можно практически количественно оценить это? например Реестр раздела .Net вашего собственного серого вещества. ; -p –

+0

+1 Хорошее обновление кода, я попробую его. Я раньше не использовал RuntimeEnvironment, интересно знать. – Ash

0

Это настолько большое, что никто действительно знает свой размер?

Что касается размера файла, то в моей системе рамки 2.0, 3.0 и 3.5 занимают около 130 МБ дискового пространства, а 64-разрядные версии занимают примерно 93 МБ. Но это не считается материалом, который является основным для Win7.

2

Я не использовал его сам, но я думаю, что это информация, которую может предоставить вам NDepend.

0

Это немного сложно ответить без определения того, что означает «большой» - размер IL (.dll)? Размер исходного кода? Объем функциональности? Кроме того, вы говорите о последнем распространенном из 3.5 SP1 без каких-либо официальных надстроек (то есть материала F #, MVC и т. Д.), Которые полностью поддерживают части «рамки», но не поставляют с 3.5 распространяемый?

Я не пытаюсь быть трудным ... Я просто говорю, что есть несколько переменных, которые входят в то, как можно было бы определить, что нужно измерять, затем некоторые вопросы о том, какой тип палки используется для измерения Это.

+0

Как я уже сказал в вопросе, версия 3.5 FCL (включая BCL). Я определяю размер как число пространств имен, классов, структур и интерфейсов. – Ash

Смежные вопросы