HttpContext.Current.ApplicationInstance.Application vs HttpContext.Current.Application
They both refer to the same thing, the HttpApplicationState
Application
and ApplicationInstance.Application
are two versions of the same HttpApplicationState object.
From the HttpApplicationState reference:
A single instance of an HttpApplicationState class is created the first time a client requests any URL resource from within a particular ASP.NET application virtual directory. A separate single instance is created for each ASP.NET application on a Web server. A reference to each instance is then exposed via the intrinsic Application object.
To summarize:
Application
object is global to the web server.ApplicationInstance.Application
object is local to the application the request refers to. (e.g. site or virtual directory application)
This is further explained in this blog post.
Application Vs ApplicationInstance
Application refers to global application state in Classic ASP. Application is really a global dictionary object that was introduced in Classic ASP for lack of any global variables.
ASP.Net uses ApplicationIntance property to refer to application instance that is processing current request. Application instances are thread safe hence it is not required to lock the non static members. ASP.Net has Application object purely for backword compatibility so that you can easily migrate a Classic ASP application to ASP.Net. It is recommended that you store data in static members of the application class instead of in the Application object. This increases performance because you can access a static variable faster than you can access an item in the Application dictionary.
You can use following guidelines when accessing non static members in ASP.Net
ASP.Net uses ApplicationIntance property to refer to application instance that is processing current request. Application instances are thread safe hence it is not required to lock the non static members. ASP.Net has Application object purely for backword compatibility so that you can easily migrate a Classic ASP application to ASP.Net. It is recommended that you store data in static members of the application class instead of in the Application object. This increases performance because you can access a static variable faster than you can access an item in the Application dictionary.
You can use following guidelines when accessing non static members in ASP.Net
- From the Global.asax, use the this or Me object.
- From a page, every page includes a strongly-typed ApplicationInstance property.
- From the HttpContext object, use the HttpContext.ApplicationInstance property (which you type as HttpApplication)