Cache! Cache! Cache!
Manchmal gibt es solche Tage, an denen mehrere Fragen aufkommen, auf die es nur eine sinnvolle Antwort gibt: NEHMT DEN CACHE!
Beispiel: Da versucht jemand, ein SqlCommand in den ViewState(!) zu serialisieren. Auf die Frage, warum er das mache, antwortet er, dass er versuche die Performance zu steigern. Abgesehen davon, dass ein SqlCommand nicht serialisierbar ist, hätte es absolut keinen Sinn, es im ViewState abzulegen, denn dann müsste das serialisierte Objekt zum Client übertragen und von diesem wieder zurückgesendet werden. Bedeutet im Klartext: Die Applikation würde subjektiv noch viel langsamer werden, als dies zuvor der Fall war. Stattdessen sollte viel lieber Caching eingesetzt werde – wobei es relativ egal ist, ob es sich um Output- oder Application Data-Caching handelt. Ersteres kommt in Frage, wenn ein größerer Teil der Applikation nahezu statisch sein soll – letzteres dagegen, wenn eher die Daten gecachet werden sollen. Egal, welche Variante zum Einsatz kommt: Caching ist hier die Lösung!
Zweites Beispiel: Jemand will Inhalte anderer Seiten abrufen und darstellen (und darf das auch). Wird bei jeder Anforderung ein entsprechender WebRequest erzeugt, dauert das jedesmal cirka vier oder fünf Sekunden, die schon spürbar sind. Der verwendete Lösungsansatz war, auf Threadings auszuweichen, was aber das Problem nicht wirklich lösen dürfte. Viel sinnvoller erscheint es, die Daten (so sie nicht benutzerspezifisch sind) einmal einzulesen, für eine gewisse Zeit zu cachen und anschließend über ein CacheItemRemovedCallBack erneut laden zu lassen – vielleicht 1x alle 15 Minuten…?
Also: Statt immer komplexere Szenarien zu erforschen, Dinge beim Client abzulegen oder Sache bei jedem Request neuzuladen, empfiehlt es sich viel mehr, Sachen zwischenzuspeichern und zu cachen. Erhöht die Performance und verbessert die Skalierbarkeit einer Applikation!