Faala Galera,
me pediram para criar uma POC para uma tela sinistra, onde no pior do casos terei um Grid de 500x500 com colunas editáveis. Na mesma hora falei que o desempenho seria horrível e tentei convencer o cliente para tentarmos
reduzir a quantidade de colunas, porém sem êxito. (Cliente viciado no Excel)
Sendo assim coloquei mãos na massa e comecei alguns testes, segue a descrição de alguns testes que fiz:
1º - ASP.NET 4 e GridView - Como eu queria mostrar que o desempenho não seria bom criei a primeira POC utilizando ASP.NET 4.0 com GridView, como era de se esperar a POC ficou com um péssimo
desempenho, quase dois minutos para renderizar o Grid.
2° - ASP.NET 4 com jQuery – Criei um webMethod que me retornava os dados e eu renderizava os mesmos como table (TD e TR), ao clicar em uma célula eu injetava um input na célula para simular
a edição do grid). Ótimo desempenho, porém teria que tratar isso no lado do servidor para poder salvar no banco.
3º - Utilizei o Grid do DevExpress – Ficou legal, porém com um desempenho médio e a edição inline não estava muito legal, pois ao clicar em uma célula o grid
exibia um “Loading” e demorava um pouco para habilitar a edição da célula. 22 segundos para renderização do Grid.
4º - Utilizei o Grid do Infragistics – A edição inline ficou muito boa, porém o desempenho perto do DexExpress foi muito pior, quase 1 minuto a mais.
5º - Silverlight 4 – Como gosto muito do Silverlight e já tive outras experiências com o mesmo, resolvi criar a POC no mesmo, porém me deparei com um problema. O exemplo em anexo
está funcionando, da forma que o cliente pediu, 2 colunas fixas e edição inline para os dados, o Binding está funcionando perfeitamente, respondendo com cerca de 18 segundos, só que, resolvi fazer um teste com 300x300 para
ver o desempenho e o Grid não renderizou.
Para tentar resolver o problema fiz algumas alterações na POC, quebrando o conceito do MVVM, porém não obtive sucesso, o problema persiste e não consegui resolver, cheguei a migrar essa POC para
o Silverght 5 só para debugar o Binding que está sendo feito no XAML da Lista que popula o Grid, e vi que a lista está chegando perfeita, toda populada, porém o grid não exibe os dados.
Descobri que o problema ocorre quando coloco um range de valores para as colunas, independente da quantidade de linhas, ou seja e eu informa a quantidade de colunas entre 248 e 498, o problema acontece e fora desse range o grid
é renderizado perfeitamente, inclusive se eu colocar 1000 colunas.
Acredito que o problema esteja acontecendo com o DataGrid do Silverlight.
Será que alguém poderia me ajudar???
Link contendo o post original com o download da solução utilizada na POC
http://silverlight.codeplex.com/workitem/9537
[]s, Pierre Assis Noronha