应用程序vs会话vscaching

以上所有内容的适当用例是什么? 看来会话和caching是非常相似的,我不能想象应用程序的太多用途。

应用程序和会话状态有一个非常重要的区别:

应用程序状态是ASP.NET应用程序中所有类都可用的数据存储库。 应用程序状态存储在服务器的内存中,比存储和检索数据库中的信息要快。 与特定于单个用户会话的会话状态不同,应用程序状态适用于所有用户和会话 。 因此,应用程序状态是存储less量经常使用的数据的有用场所,这些数据不会从一个用户变为另一个用户

应用程序状态总览
会话状态概述

另一方面,caching允许您将对象存储在需要大量服务器资源创build的内存中 – 它提供了强大的function,允许您自定义项目的caching方式以及caching的时间 – 您可以设置大量属性,如优先级和过期。

caching应用程序数据概述

虽然它们可能看起来很相似,但是它们在ASP.NET应用程序中最广泛的意义上是截然不同的,并且可以扮演不同的angular色。

会话是每个用户。 它不被用户共享。

应用程序和caching范围是应用程序范围 caching可能过期。 如果你有可以改变的数据,比如说5分钟,你可以把它放在caching中,而如果你的数据没有被定期更新,那么比放入应用程序variables的候选者更好。

>应用程序

1)Application object always stores data on the server side RAM example: Application["hits"]=1; (key-value pair). 2)Application object maintains its data till the web application is shut down or we release the data manually by assigning null or Clear() method is called. 3)Application object has no Timeouts or File Dependencies. 4)Its data can be assigned using Global.asax file 5)Application object is not used for performance optimization. USED in maintaining hit counters, data from readonly files/tables which can then be displayed on varrious web pages. 

>会话

 A session is defined as a period of time that is shared between the web application and the user. Each user that is using the web application has their own session. Items/Objects can be placed into the Session which would only define these object for that user. Session contains key variables which help to identify the related values. This can be thought of as a hash table. Each user would represent a different key node in the hash identifying unique values. The Session variables will be clear by the application which can clear it, as well as through the timeout property in the web config file. Usually the timeout is 20 minutes by default. 

>caching

 The Cache can be thought of as the memory. It is simply, the memory of the machine/server from which the source code is running from. This is an extremely important feature which can allow you to store difficult and complex constructed data which can be reused. Imaging you had to query a large set of different databases, which may consist records from databases ranging from MySQL, MSSQL, to ORACLE which were joined using some VB.NET or C# code. Now if the records where changing insignificantly every couple of hours, why would we need to do a live fetch/lookup every time the user wanted to get some information? It would first be slow, and resource intensive as we would have to reconstruct all the data before displaying it to the user. By using Cache, we can store it in memory, and directly bind the data. This would be a more elegant and efficient way to retrieve data, while maintaining optimal performance. 

在这里阅读更多

会话用于用户特定的信息。 通常你会保存用户名,用户喜好,如屏幕名称,购物车ID(如果你卖任何东西),电子邮件等

caching通常用于您拥有所有人共享的信息。 通常是减less长时间的过程或命中数据库。 IE要显示前n个文章。 你可以设置一个时间限制,所以它会刷新一个时间周期后的date

应用程序variables适用于要保存在服务器上的静态信息。 这可能是媒体文件所在的位置。

内置的inproc会话对象有一个非常重要的限制,其他答案都没有指出,这限制了它在高并发性网站中的使用。 具体而言,如果您更改代码中的任何会话项目,则请求将停止并等待,直到完成对会话对象的所有读取请求。 在这种情况下,caching是一个更好的select:

我刚刚发现为什么所有的ASP.Net网站都很慢,我正在设法解决这个问题

会话状态variables可用于所有页面,但仅适用于给定的单个会话。 会话variables就像单用户全局数据一样。 只有当前会话才能访问其会话状态。

应用程序状态variables可在所有页面和所有会话中使用。 应用程序状态variables就像多用户全局数据 。 所有会话都可以读写应用程序状态variables。

会话状态variables可用于所有页面,但仅适用于给定的单个会话。 会话variables就像单用户全局数据一样。 只有当前会话才能访问其会话状态。

这些答案都不足以说明Cache的一个非常重要的特性 – 它具有应用范围,并被所有用户共享 ! 您存储在caching中的任何数据都可供所有用户使用。 您仍然可以将数据存储在caching中,只希望对特定用户可用,但必须使用该用户唯一的caching键值,例如Cache.Add("UserData" + userID, data...