gpt4 book ai didi

optimization - 使用具有 EnableCaching = true 的 ObjectDataSource 优化分页和排序

转载 作者:行者123 更新时间:2023-12-03 16:59:21 25 4
gpt4 key购买 nike

我正在使用带有 Linq-To-SQL 类的 ODS(ObjectDataSource) 备份来填充页面上的 Gridview。

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

除此之外,我还优化了 Linq-to-SQL 类中的 Search 方法,以使用 .skip 和 .take 方法仅获取“一页”记录。

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

GridView sorting doesn't work when I Enable Caching in Custome Paging and sorting



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

http://forums.asp.net/t/1344883.aspx



我准备在排序时进行一次 DB-trip,但是当缓存打开时如何将其分开?

仅供引用,我已经有一个 AJAX 更新面板,其中有这个 Gridview(EnableViewstate = false)和 ODS(EnableCaching=true)。希望我走在正确的道路上……建议表示赞赏。

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

首先,我不相信应用程序可以比 DB 进行更好/更快的排序。其次 - 这破坏了我因优化分页而获得的整个性能优势 - 我正在使用 .skip() 和 .take() LINQ 方法来仅获取“一页”记录。

Well, finally I had to invent a fix of my own. It might be limited to my kind of scenario but for sure its much easier and also preserves the optimization of both pagination as well as data-caching.



我的解决方案:
我点击了 Gridview 的“排序”事件。如果我允许 ODS 尝试自行对缓存数据进行排序,则会触发“自定义排序”错误。取而代之的是,现在我手动执行排序并取消排序事件。
为此 - 我只需在 ODS 中显式设置“orderBy”参数,并将其设置为 Gridview 的“排序”事件中的新排序表达式。这将刷新网格,最后我会这样做:
odsOrganization.SelectParameters["orderBy"].DefaultValue = GetSortExpr(e.SortExpression);
...
e.Cancel = true;
  • this tells the ODS to cancel sorting (which I already performed before canceling the event - as above). ITs like I'm cheating the ODS and handling the sorting in background. And thanks to ODS that it senses that the 'SelectParameters["orderBy"]' has changed and performs a select once again. I The previous sort automatically gets stored in the 'odsOrganization.SelectParameters["orderBy"].DefaultValue' which I can use in sub-sequent iterations.


  • 我仍在测试这个,但令人惊讶的是,只需更新参数的 DefaultValue ODS 即可返回获取数据。这会保留缓存,直到用户执行排序(它从缓存中获取数据以进行其他操作)并返回数据库进行排序。希望它对我有用!

    最佳答案

    关于optimization - 使用具有 EnableCaching = true 的 ObjectDataSource 优化分页和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255269/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com