我有一个int列表,它以字符串的形式存储在DB中,字符串之间有逗号(4345,324,24,2424,64567,33...)。这个字符串可能会变得非常大,包含2-3,000个数字。它存储在数据库中,并且经常使用。
我在想,与其在每次需要它的时候都从数据库中读取它,不如在第一次加载之后将它存储在会话中。
一个包含1,000个int的列表需要多少内存?内存大小是否也取决于int本身,因此存储较大的int (234,332)比存储较小的int (544)需要更多的空间?
以内存空间为代价读取一次并存储在会话中是更好,还是经常读取并在渲染后从内存中丢弃更好。
谢谢你的建议。
发布于 2011-06-08 10:28:10
C#中的整数总是4个字节(不管是什么值)。因此,1,000个整数的列表大约是4,000个字节。我说大概是因为列表结构会增加一些开销。对于现代计算机来说,列表中的几千个整数应该不是问题。
发布于 2011-06-08 10:26:37
我想你走错方向了。在DB中存储可能是一个更好的选择,不是以逗号分隔的格式,而是作为int值的表。
将数据存储在会话中会显著降低可伸缩性。您可能会开始遇到OutOfMemory异常,并想知道为什么会发生这种情况。
所以我的建议是在需要的时候从数据库中读取,应用适当的索引,它会非常快。
你前进的方向是:
第1天,第1个用户-嗯,我应该在会话中存储数据吗,为什么不呢?应该很快就能奏效。无需查询数据库。也很容易做到。
第10天,第5天用户-需要存储另一个数据结构,也会将其放到会话中,何乐而不为呢?会话速度非常快。
第50天,10位用户-有一个控件很容易渲染,我将使它变得智能,渲染一次,然后放到会话中,将在每次回发时重用它。
第100天,20个用户-有时网站速度很慢,不知道为什么。但这只是偶尔的,所以没什么大不了的。
第150天,50个用户-它变得很慢。需要更好的CPU和内存?我们需要买一台更好的服务器,硬件太旧了。
第160天,60个用户-有了新服务器,运行速度更快。问题解决了。
第200天,100个用户--又慢了,为什么?这是最新最贵的服务器!
第250天,150个用户-应用程序池一直在重新循环。为什么?OutOfMemoryException?这是什么?我会用谷歌搜索。
第300天,200个用户-用户抱怨,我们失去了客户。我读到过关于WinDbg的文章,需要尝试使用它。
第350天,200个用户-如果我们开始使用网络负载均衡,我们可以购买两台服务器!买了服务器,试着使用,不工作,对会话有很多依赖。
第400天,200个用户-无法获得新客户,老客户就会离开。刚开始使用WinDbg时,发现几乎所有的内存都被会话占用了。
第#450,200个用户-开始一个名为“摆脱会话”的大项目。
第500天,250个用户-服务器现在太快了。
我在那里见过。基本上我的建议是--不要走这条路。
发布于 2011-06-08 10:28:39
我不建议将其存储在会话中,因为这将导致内存压力。如果您将一系列整数绑定到一条记录,那么听起来就像是缺少多对一关系--为什么不使用原始表的外键将整数存储在一个单独的表中呢?
https://stackoverflow.com/questions/6273552
复制相似问题