18619


10000行(列は5列)のレコードを持ったDataTableを  
asp.net4(vb.net)のasp:listviewのdatasourceに設定し、bindして一覧を表示しています。

ブラウザの描画が完了するまで、1分ほど掛かるのですが、これをもっと早く描画されるようにしたいです。

datasourceに設定するものをDataTableではなく、Listを設定するようにしたら、少しは早くなるでしょうか？

listviewのViewStateを無効にしたら早くなるのでしょうか？  
次画面から、戻った時にテキストボックスの入力値を再現したいので、ViewStateは有効にしたいところではありますが。

他にも方法がありましたら、教えてください。

よろしくお願いします。

[code]

    <%@ 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
    
[/code]


CC BY-SA 3.0
2015-11-08T04:07:13.623
18538
2015-11-10T09:10:08.930
2015-11-08T08:01:12.387
5750
9183
question
asp.net vb.net
asp:listviewの描画が遅い


そちらの環境で、どこに（何に）一番時間がかかっているのかわからないので何とも言えませんが  
こちらで試した範囲ではブラウザでのレンダリングが一番時間がかかっていました  
なので、クライアントと回線を高速なものにする、が回答だと思います

DataTableとListの差は誤差程度でした

ViewStateを無効にすることで、出力されるHTMLはかなり削減されるので、速度アップには効果はあるとは思います  
ただし、転送時間は確かに変わりますが、ブラウザでのレンダリング時間はそう大差ありませんでした

提示されている範囲では、ViewStateを無効にしても影響があるとは思えません（まあ、テキストボックスがありませんが）  
次画面から戻ると言うのがどういう処理を想定してるのか解りませんが、それもおそらくViewStateとは関係ないと思います

サーバ側で出来る範囲としては、ViewStateを無効にするとか、HTMLをシンプルにするとか  
とにかく出力するHTML量を減らす事しかないと思います


CC BY-SA 3.0
2015-11-10T09:10:08.930
18619
2015-11-10T09:10:08.930
9811
18538
answer