2010-01-26 39 views
10

Tôi thường xuyên đọc rằng khung công tác quá lớn để một nhà phát triển có kinh nghiệm với mọi phần của nó. Có một số con số thực tế chắc chắn sẽ giúp đưa mọi thứ vào quan điểm.Thư viện lớp Khuôn khổ .NET (3.5) có kích thước lớn như thế nào?

MSDN có vẻ liệt kê tất cả nhưng không có số thực tế (từ những gì tôi có thể nhìn thấy) và chi tiêu giờ đếm chúng không phải là ý tưởng của tôi về thời gian sản xuất.

  • Số Namespaces
  • Số Lớp
  • Số Struct
  • Số giao diện

Tôi nhận ra còn có các đại biểu, enums, sự kiện, vv, nhưng ở trên các loại được nhiều người quan tâm nhất.

Ngoài ra, số lượng loại trong Thư viện lớp cơ sở (BCL) cũng như kích thước của Thư viện lớp khung chung (FCL) sẽ rất thú vị.

Những thông tin này sẽ hữu ích trong 2 cách sau:

Thứ nhất, để có được một tay cầm vào bao nhiêu trong những khuôn khổ tổng thể bạn đã thực sự làm việc với và bao nhiêu bạn vẫn phải học. Thứ hai, nhiều người lập trình từ các nền tảng khác (và những người không có kỹ thuật) thường ngạc nhiên khi một lập trình viên có thể dành phần lớn thời gian của họ trong "Khuôn khổ .NET". Có một số con số chắc chắn sẽ giúp giải thích tại sao đây không phải là dấu hiệu của các kỹ năng/kinh nghiệm hẹp.

[Cập nhật]

Sử dụng mã Andrew (trên hệ thống SP1 .NET 3.5 của tôi) tôi nhận được:

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

Bạn có thể quan tâm đến Phân tích nhanh của Patric Smacchia về .NET 4.0: http://codebetter.com/blogs/patricksmacchia/archive/2009/05/21/a-quick-analyze-of-the-net-fx -v4-0-beta1.aspx –

+0

tôi biên dịch mã của Andrew trong VS2010: classess: 12704 Loại giá trị: 4416 Giao diện: 1287 – AminM

Trả lời

6

Những 2 bài đăng trên blog giải quyết chủ đề này:

Kết quả là chia nhỏ theo số lượng hội đồng, không gian tên, loại, thành viên và các mục khác.

+0

+1 Liên kết tuyệt vời, chính xác những gì đang tìm kiếm. – Ash

5

Bạn có thể sử dụng phản ánh để tìm số của các loại khác nhau trong BCL nhưng những gì là bạn hy vọng sẽ đạt được những thông tin đó?

Dưới đây là một ví dụ về cách để có được thông tin rằng:

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

Chỉ cần lưu ý rằng bạn sẽ cần phải làm điều này cho mỗi lắp ráp trong khuôn khổ để có được tổng số.

Edit: Dưới đây là một giải pháp nhanh chóng và dơ bẩn mà nên cung cấp cho bạn một ý tưởng chung của các số loại trong 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) Nhận ý tưởng về cách tốt nhất để tìm hiểu các khu vực mới (với tôi ít nhất) của khung công tác. 2) Giải thích cho những người lập trình không phải là NET và những người không có kỹ thuật lớn như thế nào .NET và tại sao nó có thể hoạt động hoàn toàn trong giới hạn của .NET. – Ash

+0

Đây là một số liệu thú vị. 1 cho thuật toán tổng hợp. Nhưng những con số này chỉ có thể trở nên thú vị nếu bạn có thể tìm ra số lượng FCL bạn biết và làm thế nào để có thể xác định số lượng thực tế đó? ví dụ. Một hàng tồn kho của phần .Net của vật chất xám của riêng bạn. ;-p –

+0

+1 Cập nhật tốt cho mã, tôi sẽ dùng thử. Tôi đã không sử dụng RuntimeEnvironment trước, thú vị để biết. – Ash

0

Đó là quá lớn mà không ai thực sự biết kích thước của nó?

Theo kích thước tệp đi, trên hệ thống của tôi, khung 2.0, 3.0 và 3.5 chiếm khoảng 130MB dung lượng đĩa và các phiên bản 64 bit mất khoảng 93MB. Nhưng đó không phải là đếm những thứ cốt lõi cho chính Win7.

2

Tôi chưa tự mình sử dụng, nhưng tôi nghĩ đây là loại thông tin mà NDepend có thể cung cấp cho bạn.

0

Hơi khó trả lời mà không có định nghĩa về ý nghĩa 'lớn' - kích thước IL (.dll)? Kích thước mã nguồn? Phạm vi chức năng? Ngoài ra, bạn đang nói về phân phối lại gần đây nhất của 3.5 SP1 mà không có bất kỳ tiện ích chính thức nào (nghĩa là, công cụ F #, MVC, v.v.) được hỗ trợ đầy đủ các phần của 'khung' nhưng không giao hàng 3.5 redistributable?

Tôi không cố gắng khó khăn ... Tôi chỉ nói rằng có một vài biến đi vào cách người ta thậm chí sẽ xác định cái gì cần đo, sau đó một số câu hỏi về loại thanh được sử dụng để đo lường nó.

+0

Như tôi đã nói trong câu hỏi, phiên bản 3.5 của FCL (bao gồm cả BCL). Tôi đang xác định kích thước như số lượng không gian tên, các lớp, cấu trúc và giao diện. – Ash

Các vấn đề liên quan