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 = null
is good enough? - Is there an explicit way to call garbage collector to reclaim the resource allocated to assem?
Instead of using
LoadFrom()
orLoadFile()
you can useLoad
withFile.ReadAllBytes()
. With this it does not use the assembly file but will read it and use read data.Your code will then look like
From here We cannot unload the file unless all the domains contained by it are unloaded.
Hope this helps.:)
Can you use another AppDomain?
You can't unload assembly from the current AppDomain. But you can create new AppDomain, load assemblies into it, execute some code inside new AppDomain and then unload it. Check the following link: MSDN
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.