如何测试某些程序集是否已加载到内存中?

时间:2014-04-01 11:23:47

标签: c# .net dll

我有一些代码使用Crystal Reports运行时库生成并丢弃一个小的虚拟报告,以确保在用户创建真实报告之前及时将库加载到内存中。 (这是一个“感知性能和问题”。)当用户生成报告时,性能得到了显着提升,因此显然所有功能都可以。

现在我需要编写一个单元测试,证明Crystal库确实在预期时已经加载到内存中 - 但是我尝试使用Assembly.GetExecutingAssembly().GetModules()来测试那些内容并没有帮助。 (GetCallingAssembly().GetModules()也不是更好。)

如何在单元测试中检查是否已加载这些组件?

TIA

1 个答案:

答案 0 :(得分:3)

以下代码示例使用GetAssemblies方法获取已加载到应用程序域中的所有程序集的列表。然后将程序集显示到控制台。

public static void Main() 
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        //Provide the current application domain evidence for the assembly.
        Evidence asEvidence = currentDomain.Evidence;
        //Load the assembly from the application directory using a simple name. 

        //Create an assembly called CustomLibrary to run this sample.
        currentDomain.Load("CustomLibrary",asEvidence);

        //Make an array for the list of assemblies.
        Assembly[] assems = currentDomain.GetAssemblies();

        //List the assemblies in the current application domain.
        Console.WriteLine("List of assemblies loaded in current appdomain:");
            foreach (Assembly assem in assems)
                Console.WriteLine(assem.ToString());
    }

P.S。 :要运行此代码示例,您需要创建名为CustomLibrary.dll的程序集,或更改传递给GetAssemblies方法的程序集名称。

请参阅MSDN