10

フレームワークが大きすぎて、1 人の開発者がそのすべての部分を経験するには大きすぎるという記事を定期的に読んでいます。いくつかの実際の数値があれば、確かに全体像を把握するのに役立ちます。

MSDN にはそれらすべてがリストされているようですが、(私が見た限りでは) 実際の数字はなく、それらを数えるのに何時間も費やすことは、生産的な時間の私の考えではありません。

  • 名前空間の数
  • クラス数
  • 構造体の数
  • インターフェイスの数

デリゲート、列挙型、イベントなどもありますが、上記の型が最も興味深いものです。

また、Base Class Library (BCL) の型の数と、Framework Class Library (FCL) 全体のサイズも興味深いでしょう。

この情報は、次の 2 つの点で役立ちます。

まず、フレームワーク全体で実際に作業した部分と、まだ学習する必要がある部分を把握します。

第二に、他のプラットフォームの多くのプログラマー (および非技術者) は、プログラマーが「.NET Framework」内でほとんどの時間を費やすことができることにしばしば驚かされます。いくつかの数字があれば、これが狭いスキル/経験を示していない理由を説明するのに役立ちます.

[アップデート]

Andrew のコード (私の .NET 3.5 SP1 システム上) を使用すると、次のようになります。

クラス: 12688
値の種類: 4438
インターフェイス: 1296
4

5 に答える 5

6

これらの 2 つのブログ投稿は、このトピックに対応しています。

結果は、アセンブリ、名前空間、型、メンバー、およびその他の項目の数によって分類されます。

于 2010-01-26T04:51:24.437 に答える
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());
    }
}

合計数を取得するには、フレームワーク内のすべてのアセンブリに対してこれを行う必要があることに注意してください。

編集:これは、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);
    }
}
于 2010-01-26T04:04:22.157 に答える
2

私自身は使ったことがありませんが、これはNDependが提供できる情報だと思います。

于 2010-01-26T04:15:17.663 に答える
0

大きすぎて誰もその大きさを本当に知らないのですか?

ファイル サイズに関する限り、私のシステムでは、2.0、3.0、および 3.5 フレームワークが約 130MB のディスク領域を占有し、64 ビット バージョンは約 93MB を占有します。しかし、それは Win7 自体のコアとなるものを数えていません。

于 2010-01-26T04:07:27.657 に答える
0

「大きい」とは何かを定義せずに答えるのは少し難しいです -- IL (.dll) のサイズですか? ソースコードのサイズ? 機能範囲?また、「フレームワーク」の完全にサポートされている部分であるが、 3.5 再配布可能?

難しいことを言っているわけではありません...何を測定するかを決定する方法にもいくつかの変数があり、それを測定するためにどのような種類のスティックが使用されるかについていくつかの質問があると言っているだけです.

于 2010-01-26T05:43:38.490 に答える