你说得很对.事实上,我甚至发现整个页面的大小可以超过web配置中设置的回发限制.
然而,有两个重要问题:
正如 comments 中指出的那样,用这么多数据加载session()也是一个非常糟糕的主意.
接下来:
您真的需要在会话()中存储那么多数据吗?虽然您指出了巨大的性能提升,但仍然给web服务器带来了很大的负载.这将消耗session()内存,更糟糕的是,如果使用基于sql server的会话,则会给sql server带来相当大的负载(该数据块由.net序列化,然后以sql server会话状态保存到一行中——这同样会给sql server带来非常大的负载——甚至"序列化"到会话的时间也需要一些时间).
一个页面上能显示多少行数据?30件上衣?
现在,对于几千行,我甚至不敢使用ViewState.它只是加载了太多的内容,让网页变得臃肿不堪.
如果只有1000行,以及网格视图(或列表视图)的数据分页,那么这就可以工作了.
但是,超过1000排?
即使在同一个星球上,你也无法装载那10万行.这根本不可能.
想想谷歌,甚至任何其他软件——网络或桌面.
我们不会下载整个互联网,然后说你用ctrl-f搜索巨大的数据页面.
这也一样.
那么,这到底意味着什么?
您必须转储内置的数据pager ,并编写自定义代码.
您可以使用最新版本的sql server(2012年以后)使用所谓的sql server数据分页.因此,这意味着我们希望让SQL server进行数据分页,而不是加载整个庞大的数据,然后try 分页该数据.一次try 处理这么多数据是不现实的——至少从用户界面的Angular 来看是这样.
(不管怎样,一个用户如何一次处理100000行——这真的不可能.
这意味着,如果你的页面有30行?那么,你甚至不需要ViewState或session.在10万行中,你只拉了30行,你的表现就会立竿见影.你的页面加载(和数据页面)的时间不到1秒!!!
你减少了服务器上巨大的内存使用,而且你也注意到了,减少了视图状态的大小.(你只有30行——这样,你甚至可以让gridview/list视图继续使用视图状态(它们拥有的自动视图状态).
那么,看看sql server端分页的概念吧.你仍然可以拼凑出一个看起来像数据pager 的东西,你可以得到(计数)表中的总行数,但你只能说一次 pull 30行.
这里概述了这项工作的原理:
What is the best way to paginate results in SQL Server
如果没有sql server 2012或更高版本,上面的链接和帖子概述了一些替代方法.我的观点和立场是,使用2012年更新的"分页"功能是一种简单的方法,尽管上面提到的一些解决方案速度更快.
所以,你必须在这里建立一个pager .你可以自己动手,但归根结底,内置的分页系统实际上只是为了更好的UI性能,而且实际上只适用于大约1000行数据.在那之后,你需要采用一个寻呼系统,你的软件和用户会因此而喜欢你——因为一切都会以你点击鼠标所能达到的速度响应和运行.您甚至不需要为此采用ajax调用,但必须将从SQL server中提取的行数减少到30或20行,或者减少网格一次显示的行数.