Sto iniziando ad usare le estensioni AJAX di Microsoft in modo più approfondito. Aggiungendo un CalendarExtender ad una pagina ASP.NET mi sono accorto, insieme ai miei colleghi, di una lentezza esasperante e di un'occupazione spropositata in memoria.
Pensando ad un errore nel mio sito o ad un problema nella mia versione del control toolkit mi sono scaricato l'ultima versione e ho fatto un test sul SampleWebSite. Anche in questo caso gli stessi problemi.
A questo punto mi sono deciso ad indagare e ho fatto affidamento su San Google. Ho trovato questo issue nel sito CodePlex del progetto. Sebbene al momento sia stato chiuso perchè non riproducibile, non mi pare che sia stato effettivamente risolto, come viene sottolineato da chi ha aperto la segnalazione.
Al momento l'unica soluzione è quella di scaricarsi il codice sorgente e andarsi a modificare il file CalendarBehavior.js. Le modifiche da fare sono quelle elencate nella segnalazione:
I fixed the problem. In fact, there are two problems.
-1st: if I remove the "select" event in _popupDiv$delegates, it removes one of the memory leak problem. Moreover, I do not understand why this event is used, because IE and Firefox works fine without (perhaps for other browser ?).
-2nd: in the dispose method, there are some bad conditions to remove the handlers on _daysTable, _monthsTable and _yearsTable: they are on _daysRows, _monthsRows and _yearsRows, that are properties of the class but never initialized, so I remove this properties and change conditions from _[...]Rows to _[...]Table.
Sul primo punto non mi pronuncio, anche a me sembra che l'evento select non sia mai chiamato. Per quanto riguarda la dispose, vengono controllate delle proprietà che effettivamente non sono mai istanziate e quindi dovrebbero essere sempre null.
Eseguendo queste modifiche anche nella mia installazione i problemi di memoria sono scomparsi. In ogni caso mi sembra che il Calendar sia ancora troppo pesante e reagisca lentamente all'input dell'utente. Mah!