C# 在会话对象中放置类参数是一个好主意吗?

C# 在会话对象中放置类参数是一个好主意吗?,c#,asp.net,C#,Asp.net,我最近问了一个关于存储数据库搜索结果的问题,在这个问题中,我将一个包含100000多条记录的datatable放入一个session对象,然后在另一个页面上检索该会话,并将其绑定到gridview并显示结果。这显然不是很好,因此与其这样做,不如将搜索参数存储在会话对象中,并将其传递到结果页面,然后在该页面上运行搜索查询。这和其他方法一样好。如果有数量有限的特定术语,您可能希望将它们作为URL的一部分,并使用Response.QueryString查询它们。更好!只需访问另一页上的Session对

我最近问了一个关于存储数据库搜索结果的问题,在这个问题中,我将一个包含100000多条记录的datatable放入一个session对象,然后在另一个页面上检索该会话,并将其绑定到gridview并显示结果。这显然不是很好,因此与其这样做,不如将搜索参数存储在会话对象中,并将其传递到结果页面,然后在该页面上运行搜索查询。

这和其他方法一样好。如果有数量有限的特定术语,您可能希望将它们作为URL的一部分,并使用Response.QueryString查询它们。

更好!只需访问另一页上的Session对象,无需“传递”任何内容。

我认为此解决方案更轻量级,在大多数情况下都有效。然而,有时我会遇到这样的情况:我希望很多数据比请求的寿命更长,但不一定要将其存储在会话或应用程序状态

例如,有时用户运行查询并返回一些结果,他/她可以查看这些结果的一些摘要信息。此时,他/她只想处理这些结果,而不是几秒钟内运行另一个查询的结果。有时,这些数据相当不稳定,查询之间的时间跨度即使很小,也可能意味着100条记录和108条记录之间的差异,或者这100条记录(某些状态为X)和同100条记录(某些状态为Y)之间的差异

输入OODB/RDBMS混合模型
虽然已经用几种方法解决了这个问题,但我想到的最好的方法是使用RDBMS和OODB的混合体来消除在会话状态下存储记录的内存膨胀。基本上,我将一个数据库文件放在web服务器上,将RDBMS中的记录读取到一个对象图中,然后将该图持久化到db4o中。用户处理完结果后,我将从db4o中删除图形。利用db4o的透明激活和持久性,它工作得非常出色


对象数据库为我解决了不少类似的问题;即使我的应用程序安装在RDBMS上,像db4o这样的库也能让我在内存消耗和“寿命较短”(或“寿命较长”)的数据之间架起桥梁。

谢谢,所谓“通过”,我的意思是访问。我只是想得到一些鼓励。我想了想,但是有大约20个不同的搜索参数。我认为这对于查询字符串来说太长了。