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