1

私はWinFormsアプリケーションを構築しています。1 つの .exe ファイルと複数の Dll に違いがあるかどうかを知りたいです。実際、私は 1 つの .exe を 7Mb 持っていますが、パフォーマンスの問題が心配です。しかし、フレームワークが起動時に必要なすべての Dll をロードすることを読んだので、アセンブリの断片化は役に立ちません。は正しい?

4

1 に答える 1

6

しかし、フレームワークが起動時に必要なすべてのDLLをロードすることを読みました

必要に応じてそれらをロードします。これは、起動時に多くが必要になることを意味する傾向がありますが、「必要なものをすべて見つけて今すぐロードする」という魔法のステップはありません。特に、アセンブリは通常、JIT が現在読み込まれていない dll 内の型参照を検出したときに読み込まれます。

ただし、多くの点で、1 つの大きなアセンブリは問題にならないことに注意してください。JIT は型ごとです。アセンブリを読み込むときに、アセンブリ内のすべての型を調べるわけではありません。同時に、アセンブリの解決/検証/融合は、dll が多すぎると顕著になる可能性がありますが、それは非常に大きな数の場合にのみ問題になります。ほんの一握りや十数個程度は大した問題ではありません (実際、.NET フレームワーク自体は多くの個別の dll に分割されています)。

ほとんどのシナリオでは、起動時のパフォーマンスは、主にコードが起動時に行うこと (外部構成の処理など) に関連しています。

情報については、簡単な winform テストでは、winforms の使用には少なくとも6 つの dll が含まれることが示されています (機能の追加などにより)。

{your application}
mscorlib
System.Windows.Forms
System
System.Drawing
Accessibility

経由:

using System;
using System.Windows.Forms;
public class Program {
    static void Main() {
        Application.EnableVisualStyles();
        using (var form = new Form()) {
            Application.Run(form);
        }
        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            Console.WriteLine(assembly.GetName().Name);
    }
}
于 2013-06-03T06:53:42.697 に答える