I use \'n\' number of server controls in my page. Now I am into performance tuning and I\'ve noticed that my ViewState
is too large and it makes my page slow.<
Assuming the size of viewstate is the main cause of the 'slowness', I would like to suggestion you tackle it from a more holistic approach.
You have 'n' number of server controls, do you need all 'n' numbers to be server controls and not just plain HTML?
Say you really need all 'n' of them, do all of them need to have viewstate enabled?
Here is one good article (if you haven't already read) which provides more insights: VIEWSTATE size minimization
Exactly the issue that I had. I had to extend the HiddenFieldPageStatePersister and save the viewstate in a database. I have written an entire article that will guide you.
http://ashishnangla.com/2011/07/21/reducing-size-of-viewstate-in-asp-net-webforms-by-writing-a-custom-viewstate-provider-pagestatepersister-part-12/
The first thing you should do is turn off viewstate wherever you don't need it. Examine the controls and determine which ones absolutely need viewstate turned on.
Viewstates should only be used when you need to remember the state of the page between postbacks. It's used to prevent extra access to the database. So, if this isn't required in your control, use EnableViewState = False
. If nothing on your page is going to need a viewstate, you can disable viewstates for that page by adding EnableViewState = False
within the Page
tag.
If your server can afford it, you may want to transfer data into Sessions
. Do this if necessary for security (viewstate should not contain sensitive data), or if your viewstate is holding a large amount of data. Be careful as, by default, Sessions
are stored in memory of the server. Therefore, you don't want to use this too much with large data if you're expecting many concurrent users. You can, however, change where the Session is stored (i.e. another server).
Add the following code to the page which generates large viewstate values. Alternatively, this can be added to master page to eliminate the need of adding on each page. The below code allows the viewstate to be stored in session.
protected override PageStatePersister PageStatePersister
{
get
{
return new SessionPageStatePersister(this);
}
}
EnableViewState = false;
should become your friend.
Assuming you currently are using viewstate ONLY where you need you can do the following:
Labels
to Literals
, especially if you are using them in templates. Labels take much more viewstate.