Desempenho da Função Empty()
Moderador: Moderadores
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Desempenho da Função Empty()
Olá!
Fiz um debug, aqui do browse, usando LetoDBf, ficou muito lenta a navegação.
Descobri que é a função empty().
Postei lá no forum de desenvolvedores o problema.
Por exemplo, se uso empty() em um field(campo) do DBF de tamanho 1,2,3 caracteres, ele é rápido.
Mas seu eu uso empty(arquivo pdf) ou uso empty() em um campo FPT anexado um arquivo grande, fica bem lento mesmo.
Editado: É uma rede EXTERNA, não é rede local. E sem fio, das antigas. Abaixo de 65MBs.
Fiz um debug, aqui do browse, usando LetoDBf, ficou muito lenta a navegação.
Descobri que é a função empty().
Postei lá no forum de desenvolvedores o problema.
Por exemplo, se uso empty() em um field(campo) do DBF de tamanho 1,2,3 caracteres, ele é rápido.
Mas seu eu uso empty(arquivo pdf) ou uso empty() em um campo FPT anexado um arquivo grande, fica bem lento mesmo.
Editado: É uma rede EXTERNA, não é rede local. E sem fio, das antigas. Abaixo de 65MBs.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Re: Desempenho da Função Empty()
Se isso for problema, tentar alternativas.
Talvez Len( Left( string, 10 ) ) < 1
Se considerar tamanho zero como vazio pra PDF e Memo.
DBF em rede sem fio é problema, não sei com letodbf.
Talvez Len( Left( string, 10 ) ) < 1
Se considerar tamanho zero como vazio pra PDF e Memo.
DBF em rede sem fio é problema, não sei com letodbf.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
Resolvi lendo um outro campo, que é a extensão do arquivo, ficou bom.
Um campo com tamanho 10, para colocar a extensão, se é pdf/gif/jpeg/doc/xdoc/xls...
Mas fica a dica de degradação, o empty() irá ler todo o arquivo, provavelmente dentro de algum marcador do campo em questão FPT.
Por exemplo <pdf>meu grande pdf</pdf> ao invés dele só ver o inicio e retornar .T., ele ler todo o conteúdo da tag <pdf> sem necessidade.
Não sei como é internamente, não sou programador C, mas que tem esse problema, tem.
No meu código é bem simples é assim: IF Empty(cx->arquivo) // Só isso ai em um campo MEMO FPT. Fica bem lento em rede com baixa velocidade.
Só mudei para IF Empty(cx->sufixo). Ficou normal a velocidade. Isso em 64Mbs. SEM FIO. Não é a 5G nem 4G rsrsrs.
Esse DBF tem mais de 3 mil registros.
Conforme for irei disponibilizar ao forum, algum teste.
Resolvi lendo um outro campo, que é a extensão do arquivo, ficou bom.
Um campo com tamanho 10, para colocar a extensão, se é pdf/gif/jpeg/doc/xdoc/xls...
Mas fica a dica de degradação, o empty() irá ler todo o arquivo, provavelmente dentro de algum marcador do campo em questão FPT.
Por exemplo <pdf>meu grande pdf</pdf> ao invés dele só ver o inicio e retornar .T., ele ler todo o conteúdo da tag <pdf> sem necessidade.
Não sei como é internamente, não sou programador C, mas que tem esse problema, tem.
No meu código é bem simples é assim: IF Empty(cx->arquivo) // Só isso ai em um campo MEMO FPT. Fica bem lento em rede com baixa velocidade.
Só mudei para IF Empty(cx->sufixo). Ficou normal a velocidade. Isso em 64Mbs. SEM FIO. Não é a 5G nem 4G rsrsrs.
Esse DBF tem mais de 3 mil registros.
Conforme for irei disponibilizar ao forum, algum teste.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Re: Desempenho da Função Empty()
Pelo que entendi lá do fórum internacional, EMPTY() pode ser espaços em branco.
Então num texto de 2GB vai comparar 2GB de letras.
Talvez um loop com saída pra ficar mais rápido, mas aí é com os desenvolvedores.
Fez o teste se realmente o problema é do Empty() ?
Pode ser o tempo pra retornar o campo pela rede, e não exatamente a função.
Então num texto de 2GB vai comparar 2GB de letras.
Talvez um loop com saída pra ficar mais rápido, mas aí é com os desenvolvedores.
Fez o teste se realmente o problema é do Empty() ?
Pode ser o tempo pra retornar o campo pela rede, e não exatamente a função.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
O retorno do Empty() demora, fiz testes. Achei que era o codebock de imagens. Fui mudando até chegar no retorno do empty().
Basta direcionar o empty() para outro FIELD do mesmo DBF que fica rápido.
Tem como eles testarem se é na string em si ou no FPT com vários arquivos dentro.
Assim: IF EMPTy("ABC") e IF EMPTY(&STRING_DO_MEU_FILME_DE_4Gib_MP4)... Pode ver que o tempo do retorno, não será o mesmo.
FPT aceita esses arquivos... DOC,XLS, etc...
Provavelmente o LOAD/UNLOAD disso tudo ai para ver.
Pq precisa dar um LOAD do conteúdo todo, nisso demora.
É a função, que lê o FPT ou o ARQUIVO dentro do FPT.(Não sei)Pode ser o tempo pra retornar o campo pela rede, e não exatamente a função.
O retorno do Empty() demora, fiz testes. Achei que era o codebock de imagens. Fui mudando até chegar no retorno do empty().
Basta direcionar o empty() para outro FIELD do mesmo DBF que fica rápido.
Tem como eles testarem se é na string em si ou no FPT com vários arquivos dentro.
Assim: IF EMPTy("ABC") e IF EMPTY(&STRING_DO_MEU_FILME_DE_4Gib_MP4)... Pode ver que o tempo do retorno, não será o mesmo.
FPT aceita esses arquivos... DOC,XLS, etc...
Provavelmente o LOAD/UNLOAD disso tudo ai para ver.
Pq precisa dar um LOAD do conteúdo todo, nisso demora.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Re: Desempenho da Função Empty()
Empty() é uma função "local", não da base de dados.
Pra ter o resultado que está querendo, só se ela fosse uma função da base de dados, ou do letodbf.
Mesmo assim, o letodbf vai estar usando 4GB de memória pra acessar o registro/campo.
Talvez um campo adicional com tamanho, gravado ao gravar o campo memo.
Pra ter o resultado que está querendo, só se ela fosse uma função da base de dados, ou do letodbf.
Mesmo assim, o letodbf vai estar usando 4GB de memória pra acessar o registro/campo.
Talvez um campo adicional com tamanho, gravado ao gravar o campo memo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
Eu conversei lá com o Francesco Perillo.
A função empty() deveria sabe se é uma variável de memória ou um banco de dados.
De toda forma EXISTE os MARCADORES de INICIO e FIM ou de uma variável de memoria ou de base de dados, no caso DBF. Os SLOTs ou CARGO ou CONTAINERs, seja lá como for o nome dado.
Não tem sentido a função ter que ler todo o conteúdo, se logo no inicio ela já sabe que, o que está sendo analisado está cheio ou com espaços.
É simples de entender, um campo com tamanho 5000 só com espaços em banco dentro, neste caso ela empty() pode ficar lenta lendo 1 por 1 pq, neste caso TODOS são barra de espaços.(ok)
Mas se ele começa a ler o mesmo campo e logo no inicio tem um "X" para quê a função continuará lendo até chegar no marcador de final ?
Esse é o problema.
Eu conversei lá com o Francesco Perillo.
A função empty() deveria sabe se é uma variável de memória ou um banco de dados.
De toda forma EXISTE os MARCADORES de INICIO e FIM ou de uma variável de memoria ou de base de dados, no caso DBF. Os SLOTs ou CARGO ou CONTAINERs, seja lá como for o nome dado.
Não tem sentido a função ter que ler todo o conteúdo, se logo no inicio ela já sabe que, o que está sendo analisado está cheio ou com espaços.
É simples de entender, um campo com tamanho 5000 só com espaços em banco dentro, neste caso ela empty() pode ficar lenta lendo 1 por 1 pq, neste caso TODOS são barra de espaços.(ok)
Mas se ele começa a ler o mesmo campo e logo no inicio tem um "X" para quê a função continuará lendo até chegar no marcador de final ?
Esse é o problema.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
Está compilado em 64Bits tudo 64Bits. Aqui não uso mais nada em 32Bits, já tem anos isso.
Fiz um teste aqui, ele manda um arquivo no caso ".exe" do cliente para o servidor em menos de 7 segundos. Lógico que irá depender da velocidade da rede. Teste usando meu notebook WIFI. Trabalhando abaixo de 100Mibs. Nem chega a 80Mib.
Neste caso o LetoDb acessa o que o OS está acessando 4/8/etc + o SWAP o tanto que o OS consegue acessar.Mesmo assim, o letodbf vai estar usando 4GB de memória pra acessar o registro/campo.
Está compilado em 64Bits tudo 64Bits. Aqui não uso mais nada em 32Bits, já tem anos isso.
Fiz um teste aqui, ele manda um arquivo no caso ".exe" do cliente para o servidor em menos de 7 segundos. Lógico que irá depender da velocidade da rede. Teste usando meu notebook WIFI. Trabalhando abaixo de 100Mibs. Nem chega a 80Mib.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
Até pq, a função empty() foi modificada a pouco tempo para reconhecer campo com valor NULL e retornar .T. neste caso
Até pq, a função empty() foi modificada a pouco tempo para reconhecer campo com valor NULL e retornar .T. neste caso
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Re: Desempenho da Função Empty()
Código: Selecionar todos
DO WHILE ! Eof()
SKIP
ENDDO
E o registro contém.... campos incluindo memo
Sei lá se o letodbf vai fazer diferente.
Se testa Empty() ou não.... o registro já vai ter vindo.
SQL também seria assim, a não ser que peça length() ou algo assim, e só depois peça o "memo" individual.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
Sim, mas é o seguinte, não tem nada a ver com LetoDbf esse problema.
Esse problema é do Harbour. Até local usando RDDCDX dá esse problema.
O LetoDbf torna o problema PERCEPTÍVEL nessas redes mais lentas.
Faz um append de um PDF num FPT uns 3 mil e vc vai notar que o empty() em um browse() nesse campo ficará cada vez mais lento.
Sim, mas é o seguinte, não tem nada a ver com LetoDbf esse problema.
Esse problema é do Harbour. Até local usando RDDCDX dá esse problema.
O LetoDbf torna o problema PERCEPTÍVEL nessas redes mais lentas.
Faz um append de um PDF num FPT uns 3 mil e vc vai notar que o empty() em um browse() nesse campo ficará cada vez mais lento.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Desempenho da Função Empty()
Olá!
E mais outra informação.
Outra pessoa falou que no MySql, lá com ele deu o mesmo problema.
Fato é que ninguém quer anexar arquivos em base de dados. O que vejo e jogarem em uma pasta, igual o PHPBB faz.
Eu fiz assim só por comodidade de ficar vários arquivos dentro de 1 só, tipo ZIP.
Então é o seguinte, não existe UPLOAD do DBF todo. A medida que é manipulado/navegado, é mostrado no browse.
Mesma coisa até pior é no MYSQL a pessoa fazer um SELECT de 100 registros cheio de imagens/PDFs... Vai ficar lento da mesma forma.
O que todo mundo faz é subir só o link e deixa o arquivo lá na pasta dele.
E mais outra informação.
Outra pessoa falou que no MySql, lá com ele deu o mesmo problema.
Fato é que ninguém quer anexar arquivos em base de dados. O que vejo e jogarem em uma pasta, igual o PHPBB faz.
Eu fiz assim só por comodidade de ficar vários arquivos dentro de 1 só, tipo ZIP.
Então é o seguinte, não existe UPLOAD do DBF todo. A medida que é manipulado/navegado, é mostrado no browse.
Mesma coisa até pior é no MYSQL a pessoa fazer um SELECT de 100 registros cheio de imagens/PDFs... Vai ficar lento da mesma forma.
O que todo mundo faz é subir só o link e deixa o arquivo lá na pasta dele.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.