Отключение ViewState для asp: Repeater увеличивает время загрузки? - PullRequest
0 голосов
/ 09 мая 2011

У меня есть asp: Repeater , который представляет собой данные, привязанные к коллекции элементов после нажатия кнопки.Стандартная цена.Однако, если I DISABLE ViewState для повторителя, время, необходимое для загрузки повторителя после нажатия кнопки, значительно увеличивается.Это явно противоположность эффекта, которого я пытаюсь достичь.Под драматическим пониманием я имею в виду ~ 10 секунд с включенным ViewState и ~ 35 секунд с отключенным ViewState.

Я в растерянности ...

ПРИМЕЧАНИЕ: В обработчике событийдля нажатия кнопки я также кеширую источник данных.Я делаю это независимо от того, включаю ли я / выключаю ViewState.Возможно ли, что мое кэширование игнорируется при использовании ViewState?

Вот соответствующий код:

<asp:repeater id="niinMatchesTable" runat="server" enableviewstate="false">
<headertemplate>
<table id="niinMatches" class="listing alternate">
  <tr>
    <th>QTY.</th>
    <th><asp:linkbutton runat="server" onclick="sortResultsTable" commandargument="niin-niin" text="NIIN" /></th>
    <th><asp:linkbutton runat="server" onclick="sortResultsTable" commandargument="niin-partnumber" text="PART #" /></th>
    <th>Cases</th>
  </tr>
</headertemplate>
<itemtemplate>
<tr class="odd">
  <td><asp:label runat="server" text='<%# DataBinder.Eval(Container.DataItem, "Quantity") %>' /></td>
  <td><asp:label runat="server" text='<%# DataBinder.Eval(Container.DataItem, "NIIN") %>' /></td>
  <td><asp:label runat="server" text='<%# DataBinder.Eval(Container.DataItem, "PartNumber") %>' /></td>
  <td><asp:label runat="server" text='<%# DataBinder.Eval(Container.DataItem, "Cases") %>' /></td>
</tr>
</itemtemplate>
<footertemplate>
  </table>
</footertemplate>
</asp:repeater>



protected void uploadClick(object sender, EventArgs e)
{
    if (fileUploader.HasFile)
    {   
        fileUploader.SaveAs(Server.MapPath("~/temp/inventory.xls"));
        var niinMatches = getNiinMatches(); // Populates object by parsing spreadsheet

        var absExp = System.Web.Caching.Cache.NoAbsoluteExpiration;
        var slidingExp = TimeSpan.FromMinutes(10);
        Cache.Insert("_niinMatches", niinMatches, null, absExp, slidingExp);

        niinMatchesTable.DataSource = niinMatches;
        niinMatchesTable.DataBind();
    }
}

1 Ответ

0 голосов
/ 10 мая 2011

Прежде чем делать выводы, я бы взял аддон Firebug для firefox и проверил, что так долго. Но я не вижу реальной выгоды от кэширования при нажатии кнопки, так как каждый раз, когда нажимается кнопка, кэш будет обновляться ... Если только не существует другого метода, который привязывает gridview к кешированному набору данных при каждой обратной передаче.

...