I need to check the time amount to run GetTypes() after loading the dll.
The code is as follows.
Assembly assem = Assembly.LoadFrom(file);
sw = Stopwatch.StartNew();
var types1 = assem.GetTypes();
sw.Stop();
double time1 = sw.Elapsed.TotalMilliseconds;
I’d like to unload and reload the dll to check the time to spend in running GetTypes() again.
- How can I unload it?
assem = nullis good enough? - Is there an explicit way to call garbage collector to reclaim the resource allocated to assem?
Unfortunately you can not unload an assembly once it is loaded. But you can unload an AppDomain. What you can do is to create a new AppDomain (AppDomain.CreateDomain(…) ), load the assembly into this appdomain to work with it, and then unload the AppDomain when needed. When unloading the AppDomain, all assemblies that have been loaded will be unloaded. (See reference)
To call the garbage collector, you can use
GC calls the finalizers in a background thread, that’s why you have to wait and call Collect() again to make sure you deleted everything.