【问题标题】:How can I increase the performance of this FormView / SqlDataSource如何提高此 FormView / SqlDataSource 的性能
【发布时间】:2014-04-04 16:22:26
【问题描述】:

我的页面上有一个简单的 asp FormView,一切正常,但我注意到页面加载速度有点慢(2-3 秒),当真的没有理由时,它是如此简单的页面.

问题在于 FormView 使用的是 SqlDataSource,它使用的是“繁重的”选择语句,基本上抓取了配置文件表的所有字段和所有行(姓名、地址、电话等)。我假设 FormView 需要获取所有记录,以便 Paging 正常工作,但是有没有办法对其进行编码或我可以使用的属性,所以它不会抓取每一行和每一列,而只是当前的所有列姓名ID?

asp:

<asp:FormView ... DataSourceId="sdsNames" AllowPaging="True" DataKeyNames="NameId">
   <EditItemTemplate>....</EditItemTemplate>
   <InsertItemTemplate>...</InsertItemTemplate>
   <ItemTemplate>
       <asp:Label Text='<%# Eval("Name") %>'.../> 
       ...
   </ItemTemplate>
 </asp:FormView>
 <SqlDataSource ID="sdsNames" ... SelectCommand="SELECT * from tblNames">

我尝试将 SelectCommand 更改为

SELECT * from tblNames where NameId=1

因为初始页面应该显示第一个条目。但是后来我失去了分页,基本没办法查看下一条记录。

页面是什么样子的:

【问题讨论】:

    标签: asp.net sqldatasource formview


    【解决方案1】:

    这里没有太多可以提高性能的方法。没错,SqlDataSource 确实会减慢速度,因为它会从您的表中检索所有行。

    我想到了几种不同的方法:

    从查询中删除字段。
    这是最简单的解决方案,尽管它可能不适用于您的情况。如果有不需要显示/修改的字段,请将其删除。所以,不是SELECT * FROM...,而是SELECT LName, FName, Mname FROM...

    您仍然可以获取每一行,但至少每行中的数据较少。

    您可以切换到 ObjectDataSource 控件。
    我没怎么用过这个控件,but MSDN says that it performs a little better,因为它并不总是需要检索每一行:

    一些数据源,例如 ObjectDataSource 控件,提供更多 高级分页功能。在这些情况下,FormView 控件 利用数据源的更高级功能 在分页时获得更好的性能和灵活性。的数量 请求的行可能会有所不同,具体取决于数据源是否支持 检索总行数。

    您可以远离数据源控件。
    这可能比您正在寻找的复杂性更高,但它是最灵活的方法。您可以只检索所需的列和行。您可以创建 PagerTemplate,并在 FormView 数据绑定时设置值。您必须自己处理 PageIndexChanging 和 PageIndexChanged 事件才能更改分页值。

    【讨论】:

    • 很棒的答案。我有点认为没有简单的解决方案,但感谢您提供 3 个很棒的其他选择。
    • 不客气,@russds。我很高兴我至少能帮上一点忙 =)
    猜你喜欢
    • 2017-01-31
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2021-04-28
    • 2016-11-27
    • 2018-02-14
    相关资源
    最近更新 更多