如何提高此FormView / SqlDataSource的性能

时间:2014-04-04 16:22:26

标签: asp.net sqldatasource formview

我的页面上有一个简单的asp FormView,它工作正常,但是我注意到页面加载有点慢(2-3秒),当时真的没有理由对于它来说,它是一个如此简单的页面。

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

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

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

页面的样子:

enter image description here

1 个答案:

答案 0 :(得分: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事件以自行更改分页值。