CARREGAR DE MANEIRA R?PIDA A CLASSE POO
olá amigos,
como faço para ler a tabela na base de dados e carregar a classe de maneira rapida?
anteriormente eu lia a tabela e passava o datatable pro datagridview. ( carregava de modo instantâneo).
agora, seguindo as orientações do kerplunk e passando tudo para POO me surgiu um problema... ( a leitura é feita linha a linha , campo a campo)
e isso esta gerando uma perda de performance considerável.
uso mysql e conector Mysql.NET
desde já agradeço
como faço para ler a tabela na base de dados e carregar a classe de maneira rapida?
anteriormente eu lia a tabela e passava o datatable pro datagridview. ( carregava de modo instantâneo).
agora, seguindo as orientações do kerplunk e passando tudo para POO me surgiu um problema... ( a leitura é feita linha a linha , campo a campo)
e isso esta gerando uma perda de performance considerável.
uso mysql e conector Mysql.NET
desde já agradeço
São quantos registros? Quantos campos?
Aqueles vÃdeos, são aprendizado apenas e apesar de ser possÃvel usar em um ambiente de produção, existem alternativas muito melhores, como o Entity Framework.
Aqueles vÃdeos, são aprendizado apenas e apesar de ser possÃvel usar em um ambiente de produção, existem alternativas muito melhores, como o Entity Framework.
olá,kerplunk.
uma das consultas tem 65 campos e o numero de registros depende do filtro do usuário, media de 1000 a 5000 linhas podendo chegar a 30 mil.
isso pode aumentar exponencialmente com uma visão de matriz e filiais.
gostaria de passar todas essa consultas para POO, ( hoje uso select e passo o datatable para o datagridview) isso é bem rápido, mas toda visão de dados da linha tenho que ler o row da datagridview.
não usei ainda o Entity Framework, pesquisei um pouco e vi que ele é ligado diretamente na base de dados. ( como faria para passar o conection por parametros?)
vc tem vÃdeo ou material sobre o Entity Framework?
a principio, ha um modo de carregamento rápido, mantendo a estrutura que passou na vÃdeo-aula de POO?
desde já agradeço.
uma das consultas tem 65 campos e o numero de registros depende do filtro do usuário, media de 1000 a 5000 linhas podendo chegar a 30 mil.
isso pode aumentar exponencialmente com uma visão de matriz e filiais.
gostaria de passar todas essa consultas para POO, ( hoje uso select e passo o datatable para o datagridview) isso é bem rápido, mas toda visão de dados da linha tenho que ler o row da datagridview.
não usei ainda o Entity Framework, pesquisei um pouco e vi que ele é ligado diretamente na base de dados. ( como faria para passar o conection por parametros?)
vc tem vÃdeo ou material sobre o Entity Framework?
a principio, ha um modo de carregamento rápido, mantendo a estrutura que passou na vÃdeo-aula de POO?
desde já agradeço.
Convenhamos que 30 mil linhas é um bocado de coisa. Uma alternativa é usar paginação de dados. Infelizmente só tenho um vÃdeo onde faço de maneira rápida utilizando o Entity Framework. A connection string, fica no app.config ou web.config, dependendo do tipo de projeto e pode tranquilamente ser alterada. A maneira como o Entity Framework funciona internamente é bem semelhante ao que uso nos vÃdeos, obviamente, o EF tem muito mais recursos.
Como 1000 ou 5000 ou 30 mil registros é sempre muita coisa para um usuário ver, é possÃvel fazer uma técnica de Lazy Loading, onde fazemos o carregamento dos objeto conforme são vistos. é meio complexo, mas totalmente possÃvel. Carregamos coisa de 20 ou 30 registros de forma integral(com todos os dados), os demais, apenas o ID do objeto é carregado e conforme o grid é rolado, o objeto é carregado individualmente, de acordo com seu ID.
Como 1000 ou 5000 ou 30 mil registros é sempre muita coisa para um usuário ver, é possÃvel fazer uma técnica de Lazy Loading, onde fazemos o carregamento dos objeto conforme são vistos. é meio complexo, mas totalmente possÃvel. Carregamos coisa de 20 ou 30 registros de forma integral(com todos os dados), os demais, apenas o ID do objeto é carregado e conforme o grid é rolado, o objeto é carregado individualmente, de acordo com seu ID.
obrigado, kerplunk, vou estudar a respeito.
se eu conseguir passar para o EF a conection por parametros seria melhor. ( ou gostaria de uma orientação de como tratar este cenário)
a matriz enxerga as vendas de todas as filiais ( por isso o numero elevando de linhas) passo para as classes o conection de cada unidade unidade e vou add ao list e depois atribuo ao datagridview.
essa visão se faz necessária para identificar estoques, disponibilidades e start de produção.
a aplicação é descktop e ja implementei uma paginação, mas os usuários sempre deixa na seleção ( exibir todos) e prefere a barra de rolagem).
se eu conseguir passar para o EF a conection por parametros seria melhor. ( ou gostaria de uma orientação de como tratar este cenário)
a matriz enxerga as vendas de todas as filiais ( por isso o numero elevando de linhas) passo para as classes o conection de cada unidade unidade e vou add ao list e depois atribuo ao datagridview.
essa visão se faz necessária para identificar estoques, disponibilidades e start de produção.
a aplicação é descktop e ja implementei uma paginação, mas os usuários sempre deixa na seleção ( exibir todos) e prefere a barra de rolagem).
Citação:Carregamos coisa de 20 ou 30 registros de forma integral(com todos os dados), os demais, apenas o ID do objeto é carregado e conforme o grid é rolado, o objeto é carregado individualmente, de acordo com seu ID
Isso resolve o meu problema ...

Citação:Isso resolve o meu problema ...
Muito simples. Além das propriedades [Ô]IsNew[Ô] e [Ô]IsModified[Ô], coloque também uma propriedade [Ô]IsLoaded[Ô] com tipo booleano. Quando carregar somente o código(carregamento parcial), coloque essa propriedade como false(obviamente, as que estiverem carregadas completamente, coloque como true). Então você vai carregando os Ãtens conforme o datagridview é rolado.
encontrei esse código,
ele listou mais de 4 mil registros com 104 colunas em menos de 1 segundo...
teria como passar esse dt.AsEnumerable para a classe?
segue imagens
[ô]If we have results, convert to a list
If reader IsNot Nothing Then
[ô]Load the reader into a datatable
Dim dt As New System.Data.DataTable()
dt.Load(reader)
[ô]Populate a list
Dim results = dt.AsEnumerable().ToList()
ele listou mais de 4 mil registros com 104 colunas em menos de 1 segundo...
teria como passar esse dt.AsEnumerable para a classe?
segue imagens
MAXCIM
Vou te dar dois exemplos de como você pode fazer isso:
1º - Suponhamos que você tenha uma classe que contenha todos campos do DataTable
Classe:
public class ParametrosRelatorio
{
public int NumRelatorio { get; set; }
public string NomeRelatorio { get; set; }
}
Exemplo:
List<ParametrosRelatorio> lstParametrosRelatorio1 =
dtb.AsEnumerable().Select(l => new ParametrosRelatorio {
NumRelatorio = l.Field<int>([Ô]NumRelatorio[Ô]),
NomeRelatorio = l.Field<string>([Ô]NomeRelatorio[Ô])
}).ToList();
2º - Caso você não tenha uma classe que contenha todos campos do DataTable você poderia retorna uma lista de object anonymous
Exemplo:
var lstParametrosRelatorio2 =
dtb.AsEnumerable().Select(l => new {
NumRelatorio = l.Field<int>([Ô]NumRelatorio[Ô]),
NomeRelatorio = l.Field<string>([Ô]NomeRelatorio[Ô])
}).ToList();
Vou te dar dois exemplos de como você pode fazer isso:
1º - Suponhamos que você tenha uma classe que contenha todos campos do DataTable
Classe:
public class ParametrosRelatorio
{
public int NumRelatorio { get; set; }
public string NomeRelatorio { get; set; }
}
Exemplo:
List<ParametrosRelatorio> lstParametrosRelatorio1 =
dtb.AsEnumerable().Select(l => new ParametrosRelatorio {
NumRelatorio = l.Field<int>([Ô]NumRelatorio[Ô]),
NomeRelatorio = l.Field<string>([Ô]NomeRelatorio[Ô])
}).ToList();
2º - Caso você não tenha uma classe que contenha todos campos do DataTable você poderia retorna uma lista de object anonymous
Exemplo:
var lstParametrosRelatorio2 =
dtb.AsEnumerable().Select(l => new {
NumRelatorio = l.Field<int>([Ô]NumRelatorio[Ô]),
NomeRelatorio = l.Field<string>([Ô]NomeRelatorio[Ô])
}).ToList();
Tópico encerrado , respostas não são mais permitidas