做了个类似DataGrid的Web控件, (当然功能与DataGrid有很多差别), 就叫它WebDataTable吧.(Class名字), 自动使用 ViewState来保存控件在页面之间的状态保留. 好了, 问题就出在ViewState上, 数据库查询结果约1000条记录,每条记录8个列. 我的WebDataTable数据源是System.Data.DataTable,(觉得DataTable简单, 并且ADO.NET查询数据库大部分都返回DataSet或DataTable, 而且DataSet很简单就可以转DataTable的.)  在WebDataTable.DataSource的属性里, 把数据源存入ViewState, 如果数据源数量很大, 那速度明显下降.... (速度慢的原因我也知道, 要线性化嘛~ 数据多了, 当然线性化也慢). 又做了个实验, 把相同数量DataTable做为DataGrid的数据源, 发现DataGrid把DataSource线性化的速度明显比我的快很多.(又猜: DataGrid在把DataSource存入ViewState之前, 已经把DataTable类型转换为其他类型).最后决定修改我的Web控件的DataSource属性, 在存入ViewState之前,先把DataTable转换成string[][]类型(我想这个类型是最简单的了, 所以线性化起来也是最快的). 完成后发现速度竟然比DataGrid还快, 查看网页源代码比较两个_ViewState的hidden值,两者长度明显差距, 得出以下结论:1. DataGrid的DataSource存入ViewState之前, 已经转换类型, 该类型不是DataTable和string[][]. 用了哪个类型不明,不过猜想是object[][].2. 要存ViewState必须该类型是可线性化的, 如果该类型是集合, 那么集合里的任何成员必须是可线性化的. 集合的类型越简单, 那么线性化的效率越高.3. 线性化的效率非常重要, 影响每次页面的刷新时间.(除非你禁用了ViewState)欢迎添油加醋, 拍砖盖房, 献分接分....