ASP.NET Session - 大对象与许多小对象

Pet*_*nks 7 c# asp.net performance session

我有一个场景来优化我的Web应用程序如何在会话中存储数据并检索它.我应该指出我使用SQL Server作为我的会话存储.

我的场景是我需要存储一个映射到用户会话中字符串值的唯一ID列表供以后使用.我继承的当前代码是使用List<T>带有自定义对象的代码,但我已经可以看到某种字典对于性能来说要好得多.

我已经测试了两个替代方案的想法:

  1. Dictionary<int, string>在会话中存储.当我需要返回字符串时,我从会话中获取字典一次,并可以测试字典对象上的每个ID.

  2. 由于会话基本上类似于字典本身,因此使用唯一的会话密钥将字符串直接存储在会话中Session["MyString_<id>"] = stringValue".从会话中获取值基本上是反向操作.

我的测试结果显示以下基于我需要做的操作并使用100个字符串:

  • 字典 - 4552字节,0.1071秒做操作
  • 会话直接 - 4441字节,0.0845秒做操作

从这些结果中我看到我在会话中节省了一些空间(可能是因为我没有得到序列化字典对象的开销)并且从会话中获取值时似乎更快,可能因为字符串更快到反序列化比对象.

所以我的问题是,在会话中存储大量较小的对象而不是一个大的对象是否更好?存储大量较小的物体与一个我没见过的较大物体有什么不利之处吗?

lin*_*rro 1

序列化和搜索大型对象会受到惩罚(由于需要表示更复杂的结构,它们占用更多的空间和处理器时间)。

当您只能进行一次搜索时,为什么还要进行两次搜索呢?

此外,所有涉及缓存/存储解决方案的文档都提到,根据计算出的键从列表中序列化单个值比存储所有字典并检索它并在其中进行搜索要高效得多。