asp:listviewの描画が遅い
10000行(列は5列)のレコードを持ったDataTableを
asp.net4(vb.net)のasp:listviewのdatasourceに設定し、bindして一覧を表示しています。
ブラウザの描画が完了するまで、1分ほど掛かるのですが、これをもっと早く描画されるようにしたいです。
datasourceに設定するものをDataTableではなく、Listを設定するようにしたら、少しは早くなるでしょうか?
listviewのViewStateを無効にしたら早くなるのでしょうか?
次画面から、戻った時にテキストボックスの入力値を再現したいので、ViewStateは有効にしたいところではありますが。
他にも方法がありましたら、教えてください。
よろしくお願いします。
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblTime" runat="server"></asp:Label>
<asp:ListView ID="listView" runat="server" EnableViewState="True">
<LayoutTemplate>
<table border="1" cellpadding="1">
<tr style="background-color:#E5E5FE">
<th align="left">col001</th>
<th align="left">col002</th>
<th align="left">col003</th>
<th align="left">col004</th>
<th align="left">col005</th>
</tr>
<tr id="itemPlaceholder" runat="server"></tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:Label runat="server" ID="lblCol001"><%#Eval("col001") %></asp:Label></td>
<td><asp:Label runat="server" ID="lblCol002"><%#Eval("col002") %></asp:Label></td>
<td><asp:Label runat="server" ID="lblCol003"><%#Eval("col003") %></asp:Label></td>
<td><asp:Label runat="server" ID="lblCol004"><%#Eval("col004") %></asp:Label></td>
<td><asp:Label runat="server" ID="lblCol005"><%#Eval("col005") %></asp:Label></td>
</tr>
</ItemTemplate>
</asp:ListView>
</div>
</form>
</body>
</html>
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim start As Date = Date.Now
'''''''''''実際は、SQLを発行し、取得結果をDataTableとして取得しています。
'Dim data As New DataTable
'data.Columns.Add("col001")
'data.Columns.Add("col002")
'data.Columns.Add("col003")
'data.Columns.Add("col004")
'data.Columns.Add("col005")
'For i = 0 To 10000 - 1
' Dim row As DataRow = data.NewRow()
' row("col001") = i.ToString() & "あいうえおかきくけこ"
' row("col002") = i.ToString() & "あいうえおかきくけこ"
' row("col003") = i.ToString() & "あいうえおかきくけこ"
' row("col004") = i.ToString() & "あいうえおかきくけこ"
' row("col005") = i.ToString() & "あいうえおかきくけこ"
' data.Rows.Add(row)
'Next
Dim data As New List(Of TITEM)
For i = 0 To 10000 - 1
Dim it As New TITEM
it.col001 = i.ToString() & "あいうえおかきくけこ"
it.col002 = i.ToString() & "あいうえおかきくけこ"
it.col003 = i.ToString() & "あいうえおかきくけこ"
it.col004 = i.ToString() & "あいうえおかきくけこ"
it.col005 = i.ToString() & "あいうえおかきくけこ"
data.Add(it)
Next
Me.listView.DataSource = data
Me.listView.DataBind()
Dim tend As Date = Date.Now
Dim span As Double = (tend - start).TotalSeconds()
Me.lblTime.Text = String.Format(" {0:#.00} sec", span)
End Sub
End Class
Public Class TITEM
Public Property col001 As String
Public Property col002 As String
Public Property col003 As String
Public Property col004 As String
Public Property col005 As String
End Class