c# - session 中的数组、字典或列表?

标签 c# asp.net performance session data-structures

在 session 中存储一组值的最有效方法是什么?我猜它是列表/数组或字典。基本上,当用户从 DropDownList 中选择一个项目时,一个值 ( between 1 and N where N <= 20 ) 被发送回服务器。然后我希望这个值在 session 中用作索引(如果使用数组)或键(如果使用字典)。我不希望用户看到该值,因此不将其存储在 DDL 中。据我所知,字典是为键查找而设计的。但是,由于规模很小,在这种情况下使用字典是否会产生任何开销,从而降低效率?每个相应的值对用户来说都是唯一的,因此我决定使用 session 。

谢谢你的建议

最佳答案

在这里,数组将是您的最佳选择。

如果您打算添加一些更多的自定义类型而代码更改最少,则字典可能更具可扩展性。从 Dictionary 中获取项目通常是 1 跳操作。但是使用 Dictionary 的唯一开销是序列化。仅当您使用 SQLServer 或 StateServer 存储 session 时才会涉及序列化。

我做了一些基准测试,我使用 BinaryFormatter 序列化一个 int 数组、List 和一个字典。

我将每个对象序列化了 100000 次。 每个数据结构包含 20 个值。 以下是结果:

int[] took 1955 ms to serialize
List<int> took 4135 ms to serialize
Dictionary<int,int> took 27917ms to serialize

所以在涉及到序列化的时候使用Dictionary要小心。

======================================== 为了支持我的论点,即从字典中获取一个项目非常有效,我还做了一些基准测试,我在每个数据结构中存储了 20 个项目(我在上面使用过)并获取了 10000000 次项目。这是结果

int[] took 136 ms to serialize
List<int> took 184 ms to serialize
Dictionary<int,int> took 877 ms to serialize

当然比其他两个慢一点,但它提供了比其他两个数据结构更多的可扩展性。

但如果它是固定数量的项目,那么就选择数组。在这种情况下,它们是最有效的。

关于c# - session 中的数组、字典或列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205027/

相关文章:

c# - ServerPool 中的 MySqlClient 黑名单服务器

c# - 当维度大于 1,1 时指定月历中的第一个月

c# - 我可以在后面的代码中读取 css 类运行时的内容吗?

javascript - 单击即可水平移动菜单

c# - var di = new DirectoryInfo(path) 抛出异常,直到我第一次使用 Windows 资源管理器打开路径

C# MVC2 : How to get the selected value of a dropdownlist

c# - 如何从带有进度条的 winforms 通过 https 上传大文件(~4mb)?

jQuery 动态 qtip 显示 div,但每次鼠标悬停都会变得越来越慢

android - Android 中的锁屏可加快游戏速度

java - 向 Java 应用程序添加许多框架 - 会产生任何负面影响吗?