Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 优化分页&;使用EnableCaching=true的ObjectDataSource进行排序_Optimization_Sorting_Caching_Pagination_Objectdatasource - Fatal编程技术网

Optimization 优化分页&;使用EnableCaching=true的ObjectDataSource进行排序

Optimization 优化分页&;使用EnableCaching=true的ObjectDataSource进行排序,optimization,sorting,caching,pagination,objectdatasource,Optimization,Sorting,Caching,Pagination,Objectdatasource,我正在使用一个由Linq To SQL类备份的ODS(ObjectDataSource)在我的页面上填充Gridview 考虑到性能,我已经禁用了Gridview的Viewstate,并在ODS中启用了缓存 除此之外,我还优化了LINQtoSQL类中的搜索方法,以使用.skip和.take方法仅获取“pageful”记录 现在的问题是,由于缓存,ODS无法自行“排序”记录集。如本线程所述: 人们建议使用自定义排序并实现“Comparer”,但我相信这会破坏我的性能优势 我已经准备好在排序时

我正在使用一个由Linq To SQL类备份的ODS(ObjectDataSource)在我的页面上填充Gridview

考虑到性能,我已经禁用了Gridview的Viewstate,并在ODS中启用了缓存

除此之外,我还优化了LINQtoSQL类中的搜索方法,以使用.skip和.take方法仅获取“pageful”记录


现在的问题是,由于缓存,ODS无法自行“排序”记录集。如本线程所述:

人们建议使用自定义排序并实现“Comparer”,但我相信这会破坏我的性能优势

我已经准备好在排序时进行DB trip,但是在打开缓存时如何将其分离

仅供参考,我已经有了一个AJAX更新面板,其中有这个Gridview(EnableViewstate=false)和ODS(EnableCaching=true)。希望我在正确的道路上。。。欢迎提出建议


我必须使用“自定义排序”在应用程序端执行排序(也就是说,添加额外的方法来启用对一般对象集合的排序)。这个解决方案是不可接受的,因为它要求我从数据库中提取所有记录,然后对它们进行排序

首先,我不相信应用程序能比数据库做得更好/更快。其次,这破坏了优化分页所带来的整体性能优势,我使用.skip()和.take()LINQ方法只获取“分页”记录

好吧,最后我不得不发明一种 我自己的。可能只限于我这一类人 当然是这样,但肯定有很多 更容易,也保存了 两种分页方式的优化 以及数据缓存

我的解决方案: 我已点击Gridview的“排序”事件。如果我允许ODS尝试自行对缓存数据进行排序,则会触发“自定义排序”错误。相反,现在我手动执行排序并取消排序事件。 为此,我只需在ODS中显式地设置'orderBy'参数,并在Gridview的'Sorting'事件中将其设置为新的排序表达式。这将刷新网格,最后我将执行以下操作:

  • 这会告诉ODS取消排序 (我以前已经表演过了 取消事件(如上所述)。它的 就像我在欺骗ODS和处理 在后台进行排序。谢谢 它感觉到 “SelectParameters[“orderBy”]”已被删除 更改并执行一次选择 再一次。我喜欢上一种 自动存储在 'odsOrganization.SelectParameters[“orderBy”].DefaultValue' 我可以在接下来使用它 迭代

我仍在测试这一点,但令人惊讶的是,只需更新参数的DefaultValue,ODS就会返回以获取数据。这将保留缓存,直到用户执行排序(它从缓存中获取数据用于其他操作)并返回数据库进行排序。希望它能为我工作

这样行吗


链接不错,但它破坏了我的性能优势,因为它要求我获取所有数据。
odsOrganization.SelectParameters["orderBy"].DefaultValue = GetSortExpr(e.SortExpression);
...
e.Cancel = true;