一直以來,我對SqlDataSource存有相當大的疑惑。

 

每次用DataGrid或GridView做分頁的時候,總是會在SQL語法上多下一點功夫,想辦法只抓出少量的資料筆數。後來VS2005推出了SqlDataSource,可以在不寫程式的情況下就做到分頁的功能。直覺就是:這麼方便?!難道它會自己產生分頁的SQL語法?

今天總算找到時間研究了一下SqlDataSource的程式碼,果然有效能上的缺點。

 

首先我在aspx上放了一個GridView跟一個SqlDataSource,後端程式則完全不寫。

<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" DataSourceID="SqlDataSource1"></asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:MyConnectionString.ProviderName %>" 
    SelectCommand="SELECT Seq FROM Test"></asp:SqlDataSource>        
</form>

 

直接就有了分頁的功能。 

SqlDataSource_Performance

 

 

 

同時我打開Sql Profiler來觀察

SqlDataSource_Performance1

 

可以看得出來,每次換頁時都會執行一次查詢,而且是全部筆數都抓出來。果然,方便的代價就是付出效能成本。

 

 

[結論]

SqlDataSource在不設定EnableCaching的情況下,每次查詢都會老老實實的把資料全部抓出來,使用時不得不慎!

 

arrow
arrow
    全站熱搜

    AnferneeHardaway 發表在 痞客邦 留言(1) 人氣()