Alternativas a performace do datagridview
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
Curtidas 0
Respostas
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.
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