int列表的内存大小

fre*_*hie 2 .net c# asp.net session .net-4.0

我有一个int列表,它以字符串的形式存储在DB中,其间有逗号(4345,324,24,2424,64567,33 ...).这个字符串可能会变得非常大,包含2-3千个数字.它存储在数据库中并经常使用.

我想的是,不是每次需要时都从DB中读取它,最好在第一次加载后将它存储在会话中.

1,000 int的列表需要多少内存?内存大小是否也依赖于int本身,这样存储较大的int(234,332)比较小的int(544)占用更多的空间?

读取一次并以会话存储空间为代价存储在会话中会更好,或者更好地经常读取并在渲染后从内存中丢弃.

谢谢你的建议.

Ale*_*Aza 7

我认为你正走向错误的方向.存储在DB中可能是更好的选择,不是以逗号分隔格式,而是作为int值表.

在会话中存储数据将显着降低可伸缩性.你可能会开始有OutOfMemory异常,并想知道为什么会这样.

因此,我的建议是在需要时从DB读取,应用适当的索引,它将非常快.

你前进的方式是:

第1天,1位用户 - 嗯,我应该在Session中存储数据,为什么不呢.应该快速工作.无需查询DB.也很容易做到.

第10天,5位用户 - 需要存储另一个数据结构,也会把它放到会话中,为什么不呢?会话非常快.

第50天,10个用户 - 有一个控件可以渲染,我会让它变得聪明,渲染一次而不是放到Session中,将在每次回发时重复使用它.

第100天,20位用户 - 有时网站速度慢,不知道为什么.但它只是有时候,所以没什么大不了的.

第150天,50位用户 - 速度很慢.需要更好的CPU和内存?我们需要购买更好的服务器,硬件是旧的.

第160天,60位用户 - 拥有一台新服务器,工作速度更快.问题解决了.

第200天,100位用户 - 再次放慢,为什么?这是最新的最昂贵的服务器!

第250天,150位用户 - 应用程序池一直在重新启动.为什么?OutOfMemoryException异常?这是什么?我会google.

第300天,200位用户 - 用户抱怨,我们失去了客户.我读到了WinDbg,需要尝试使用它.

第350天,200位用户 - 如果我们开始使用网络负载平衡,我们可以购买两台服务器!买了服务器,试过用,没用,很多依赖Session.

Day#400,200位用户 - 无法获得新客户,老客户消失.开始使用WinDbg发现几乎所有的内存都是由Session使用的.

Day#450,200位用户 - 开始一个名为"摆脱会话"的大项目.

Day#500,250位用户 - 服务器现在如此之快.

我去过那里看过.基本上我的建议 - 不要这样走.