将数据表存储在缓存中是错误的吗?

时间:2011-03-03 22:51:21

标签: asp.net caching serialization datatable

我已经看过很多人将DataTable存储到缓存中的例子,但我只是想知道,相同的规则是否适用于适用于Session的Cache?我最关心的一条规则是:

不要将不可序列化的对象存储到Session中。仅仅因为你并不意味着它可以保证工作(我很难学到这一点)。

所以最终我的问题是:

您可以将不可序列化的对象存储到缓存中吗?

我对此进行了一段时间的研究,阅读了大量的帖子,甚至在我的ASP.NET 3.5书中阅读了有关Cache的章节,我无法在任何地方找到它。

由于我有疑问,我将把DataTable放入DataSet然后放入Cache中,但这是必要的吗?

感谢。

3 个答案:

答案 0 :(得分:3)

DataTable是可序列化的,因此在这种情况下,问题并不适用...... http://msdn.microsoft.com/en-us/library/system.data.datatable(VS.71).aspx

从页面顶部链接到上面:

[Visual Basic]
<Serializable>
Public Class DataTable
   Inherits MarshalByValueComponent
   Implements IListSource, ISupportInitialize, ISerializable
[C#]
[Serializable]
public class DataTable : MarshalByValueComponent, IListSource,
   ISupportInitialize, ISerializable

我已经多次在缓存中使用它们而没有问题。根据我的经验,更大的问题是缓存中的数据量。

答案 1 :(得分:3)

缓存始终使用机器的内存,会话使用已配置的内容:

在Web场中,Session可以是本地的(仅在设置了关联时才有效)或远程(状态服务器或数据库或自定义),但缓存始终是本地的。

因此,在缓存中存储DataTable会消耗内存,但不会使用序列化。

PS:存储DataSet而不是DataTable几乎不会改变任何内容。

答案 2 :(得分:0)

Cache和Session之间的区别在于Cache对应用程序是公共的,这意味着Cache对于登录到应用程序的所有用户都是可见的,但对于Session,每个用户都有自己的Session实例和因此,会话中缓存的数据在多个用户中不可见。

通常使用Cache来存储文件,数据结果集,对象......这些文件,数据结果集,对象......不会经常更改,加载或计算繁琐,并且通常会以这种方式提高应用程序性能。

最后,是的,您可以在缓存中存储不可序列化的对象。