AppDomain で参照されているすべてのアセンブリとアセンブリのリストを作成しようとしています。毎回 25 個の ref.assemblies を取得し、その後は AppDomain に 39 個のアセンブリを取得します。しかし、もう一度呼び出すとAppDomain.CurrentDomain.GetAssemblies()、「System.Transactions」というアセンブリがもう 1 つ取得されます。したがって、すべてのアセンブリのリストを作成するために、以下のコードを使用しています。
Console.WriteLine(GetRefAssemblies().Count());
foreach (Assembly asm in GetRefAssemblies())
{
if (!asmList.Contains(asm)) asmList.Add(asm);
foreach (Type t in asm.GetTypes())
{
if (!dict.ContainsKey(t) && t.GetConstructor(Type.EmptyTypes) != null)
{
dict.Add(t, t.GetConstructor(Type.EmptyTypes));
}
}
}
Console.WriteLine(AppDomain.CurrentDomain.GetAssemblies().Count());
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
if (!asmList.Contains(a)) asmList.Add(a);
foreach (Type t in a.GetTypes())
{
if (!dict.ContainsKey(t) && t.GetConstructor(Type.EmptyTypes) != null)
{
dict.Add(t, t.GetConstructor(Type.EmptyTypes));
}
}
}
Console.WriteLine(AppDomain.CurrentDomain.GetAssemblies().Count());
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
if (!asmList.Contains(a)) Console.WriteLine(a.FullName);
foreach (Type t in a.GetTypes())
{
if (!dict.ContainsKey(t) && t.IsClass && t.GetConstructor(Type.EmptyTypes) != null)
{
dict.Add(t, t.GetConstructor(Type.EmptyTypes));
}
}
}
whereGetRefAssemblies()は、参照されているすべてのアセンブリを読み込んで返します。出力のスクリーンショットは次のとおりです。[ http://i.stack.imgur.com/sknC6.png]
AppDomain でアセンブリをスキャンした後に System.Transactions が読み込まれるのはなぜですか? コードを最適化するにはどうすればよいですか?