Alternativas a performace do datagridview

12/02/2009

Olá eu tenho uma aplicação repleta de telas de consultas (que utiliza o componente dataGridView) e estou com um serio problema, tive fazendo teste nela e inseri 10.000 itens e 5.000 clientes, resultado?  Essas telas se transformaram um problema pq ela demora muito (uns 15 segundos) para preencher e eu não consegui roda essa rotina em segundo plano e isso esta me preocupando muito. Eu uso o Nhibernate e confesso que não o conheço profundamente, não sei dizer se ele esta influenciando no desempenho da aplicação A questão é vcs teriam alguma idéia de como melhorar isso e se esse problema tem relação com o nhibernate e se tiver relação com o nhibernate qual seria o caminho para melhorar.   Segue abaixo uma image da minha tela de produto.
Daniel Porfirio

Daniel Porfirio

Curtidas 0

Respostas

Fabio Mans

Fabio Mans

12/02/2009

Olá no seu caso eu não exibiria todos os dados de uma vez, nesta situação não tem jeito você tem que paginar, independente de utilizar Nhibernate ou não. Você rodando a Query diretamente no SQL Server Management Studio ou Enterprise Manager quanto tempo está demorando? Veja abaixo um exemplo de Procedure que realiza paginação     CREATE PROCEDURE ResgatarClientes       @QtdePagina As Int,     @PagAtual As Int,     @TotalClientes As Int OUTPUT       AS       DECLARE @ContactName As Varchar(50)     DECLARE @City As Varchar(50)     DECLARE @QtdeInicial As Int     DECLARE @Contador As Int       SET @QtdeInicial = 0     SET @Contador = 0       SET NOCOUNT ON       CREATE TABLE #ClientesTemp     (         ContactName Varchar(50)         City Varchar(50)     )       DECLARE curPaginacaoClientes CURSOR FAST_FORWARD FOR         SELECT ContactName, City FROM Customers ORDER BY ContactNameASC       OPEN curPaginacaoClientes     FETCH NEXT FROM curPaginacaoClientes         INTO @ContactName, @City           WHILE @@FETCH_STATUS = 0         BEGIN             IF @QtdeInicial >= (@PagAtual * @QtdePagina) - @QtdePagina             BEGIN                 INSERT INTO #ClientesTemp VALUES(@ContactName, @City)                 SET @Contador = @Contador + 1                   IF @Contador >= @QtdePagina                     BREAK             END             SET @QtdeInicial = @QtdeInicial + 1               FETCH NEXT FROM curPaginacaoClientes                INTO @ContactName, @City         END       CLOSE curPaginacaoClientes     DEALLOCATE curPaginacaoClientes       SELECT ContactName, City FROM #ClientesTemp       DROP TABLE #ClientesTemp       SET NOCOUNT OFF       SET @TotalClientes = (SELECT COUNT(CustomerID) FROM Customers) GO   No código acima, a Stored Procedure recebe dois parâmetros que é a página requisitada pelo Usuário e a quantidade de registros por página. Além disso, como dito anteriormente, existe um parâmetro de OUTPUT chamado @TotalClientes que e responsável por retornar a quantidade de Clientes para que seja possível efetuar os cálculos e assim exibindo corretamente a navegação da paginação.
  Tente adpatar no seu código, eu acredito que sua resposta ficará mais rápida.   Dúvidas entre em contato. ===============================================================================   Olá eu tenho uma aplicação repleta de telas de consultas (que utiliza o componente dataGridView) e estou com um serio problema, tive fazendo teste nela e inseri 10.000 itens e 5.000 clientes, resultado?  Essas telas se transformaram um problema pq ela demora muito (uns 15 segundos) para preencher e eu não consegui roda essa rotina em segundo plano e isso esta me preocupando muito. Eu uso o Nhibernate e confesso que não o conheço profundamente, não sei dizer se ele esta influenciando no desempenho da aplicação A questão é vcs teriam alguma idéia de como melhorar isso e se esse problema tem relação com o nhibernate e se tiver relação com o nhibernate qual seria o caminho para melhorar.   Segue abaixo uma image da minha tela de produto.
GOSTEI 0
POSTAR