I keep getting asked about AppDomains in interviews, and I know the basics:
- they are an isolation level within an application (making them different from applications)
- they can have threads (making them different from threads)
- exceptions in one appdomain do not affect another
- appdomains cannot access each other’s memory
- each appdomain can have different security
I still don’t get what makes them necessary. I’m looking for a reasonable concrete circumstance when you would use one.
Answers:
- Untrusted code
- Core application protected
Untrusted/3rd party plugins are barred from corrupting shared memory and non-authorized access to registry or hard drive by isolation in separate appdomain with security restrictions, protecting the application or server. e.g. ASP.NET and SQL Server hosting component code - Trusted code
- Stability
Application segmented into safe, independent features/functionality - Architectural flexibility
Freedom to run multiple applications within a single CLR instance or each program in its own.
Anything else?
Probably the most common one is to load assemblies that contain plug-in code from untrusted parties. The code runs in its own AppDomain, isolating the application.
Also, it’s not possible to unload a particular assembly, but you can unload AppDomains.
For the full rundown, Chris Brumme had a massive blog entry on this:
http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspxhttps://devblogs.microsoft.com/cbrumme/appdomains-application-domains/