APLICACAO DEMASIADO LENTA
Desenvolvi um programa que faz uma ligação a um servidor via FTP usando API do wininet.dll. São copiados para o disco local, cerca de 60 ficheiros com 100KB cada um.
Acontece que esta tarefa chega a demorar mais de 1 minuto desmotivando os utilizadores, fazendo com que até encerrem o programa antes de ser terminada a transação.
Haverá alguma forma de acelerar este proceso.
Outro pormenor, a velocidade varia muito entre computadores. Tenho um que demora metade do tempo....será que a versão do wininet instalada no computador, estará relacionada com este problema?
Já tentei fazer essa mesma transacção, usando o FTP pelo DOS e apenas ganhei 3 segundos!
Acontece que esta tarefa chega a demorar mais de 1 minuto desmotivando os utilizadores, fazendo com que até encerrem o programa antes de ser terminada a transação.
Haverá alguma forma de acelerar este proceso.
Outro pormenor, a velocidade varia muito entre computadores. Tenho um que demora metade do tempo....será que a versão do wininet instalada no computador, estará relacionada com este problema?
Já tentei fazer essa mesma transacção, usando o FTP pelo DOS e apenas ganhei 3 segundos!
Miguel Angelo
A velocidade do processamento do computador depende das seguintes variáveis:
Memória RAM, Processador, velocidade de acesso aso dados no Hard Disc, Memória da placa de vÃdeo e de som (caso a aplicação utilize recurso de audio e vÃdeo).
Acredito que este é o motivo para a variação de processamente entre máquinas, tente por exemplo utilizar as API da biblioteca Winsock ou outra API que tenha as mesmas funcionalidades.
A velocidade do processamento do computador depende das seguintes variáveis:
Memória RAM, Processador, velocidade de acesso aso dados no Hard Disc, Memória da placa de vÃdeo e de som (caso a aplicação utilize recurso de audio e vÃdeo).
Acredito que este é o motivo para a variação de processamente entre máquinas, tente por exemplo utilizar as API da biblioteca Winsock ou outra API que tenha as mesmas funcionalidades.
Não acho o tempo em torno de 1 minuto lento para a copia via FTP de 6000 KB, pelo contrario acho uma boa performance. é uma quantidade de dados razoavel, vc deve explicar isso ao usuários.
O que pode ser feito seria deixar essa copia rodando em segundo plano, permitindo assim o uso do sistema pelo usuario, no termino da copia vc mostra uma msg.
O que pode ser feito seria deixar essa copia rodando em segundo plano, permitindo assim o uso do sistema pelo usuario, no termino da copia vc mostra uma msg.
E PQ durante a cópia, VC não coloca um PROGRESSBAR com o andamento da cópia dos dados??
Assim, o usuário ficará sabendo que está sendo copiado um determinado arquivo, e quanto mais ou menos falta para acabar com tudo!!
Assim, o usuário ficará sabendo que está sendo copiado um determinado arquivo, e quanto mais ou menos falta para acabar com tudo!!
Têm razão, mas tou lidando com usuários bastante exigentes no que se refere a velocidade! Mesmo eu sou exigente nesse ponto.
Acontece que já pensei numa solução, mas não sei como a implementar:
- queria dar ao usuário a possibilidade de escolher o nº de ficheiros a serem transferidos do servidor, pois na maioria das vezes, uma grande quantidade de ficheiros nem é necessária, sendo estes, sempre, os mais antigos.
Por este motivo, precisava da vossa ajuda para filtrar por data de criação, os ficheiros a serem transferidos. Tendo em conta que utilizo API wininet.dll.
Depois de declarar as funções necessários num módulo, faço a ligação ao servidor:
Depois transfiro os todos os ficheiros com extensão .Z:
Ajudem-me por favor
Acontece que já pensei numa solução, mas não sei como a implementar:
- queria dar ao usuário a possibilidade de escolher o nº de ficheiros a serem transferidos do servidor, pois na maioria das vezes, uma grande quantidade de ficheiros nem é necessária, sendo estes, sempre, os mais antigos.
Por este motivo, precisava da vossa ajuda para filtrar por data de criação, os ficheiros a serem transferidos. Tendo em conta que utilizo API wininet.dll.
Depois de declarar as funções necessários num módulo, faço a ligação ao servidor:
lngINet = InternetOpen("Liga", 1, vbNullString, vbNullString, 0)
lngINetConn = InternetConnect(lngINet, strServidor, 0, "guest", "guest", 1, 0, 0)Depois transfiro os todos os ficheiros com extensão .Z:
lngHINet = FtpFindFirstFile(lngINetConn, "/home/*.Z, pData, 0, 0)
strTemp = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1) ' Download do 1º ficheiro da pasta
blnRC = FtpGetFile(lngINetConn, "/home2/" & pData.cFileName, pData.cFileName, 0, 0, 2, 0)
blnRC = InternetFindNextFile(lngHINet, pData) ' Download dos ficheiros seguintes
strTemp = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1) ' Download do 1º ficheiro da pasta
blnRC = FtpGetFile(lngINetConn, "/home2/" & pData.cFileName, pData.cFileName, 0, 0, 2, 0)Ajudem-me por favor
Porque será que quando posto algo relacionado com o uso de API do wininet, ninguém responde?
Já é o meu 3º post relacionado com este metodo, e em nenhum obtive resposta!
Já é o meu 3º post relacionado com este metodo, e em nenhum obtive resposta!
Nunca usei essa API. Mas se vc passa o nome do arquivo, então basta dar um nome no arquivo que identifique a idade do arquivo.
O que identifica um ficheiro antigo? é a data? Se for coloca a data no nome do arquivo.
Ex:
arquivo1_01_05 ( janeiro 2005 .....
arquivo2_02_05
arquivo3_03_05
Dessa forma é possivel vc pegar o arquivo que deseja.
O que identifica um ficheiro antigo? é a data? Se for coloca a data no nome do arquivo.
Ex:
arquivo1_01_05 ( janeiro 2005 .....
arquivo2_02_05
arquivo3_03_05
Dessa forma é possivel vc pegar o arquivo que deseja.
Obrigado Renato Mattos, mas acontece que os arquivos que estão no servidor, não são, nem podem, ser criados por mim, eles são gerados automaticamente, logo os nomes são completamente aleatórios excepto a extensão que é sempre = .Z.
Eu apenas preciso fazer download desses arquivos mas apenas os mais recentes, tipo os 10 mais recentes contidos na pasta.
Haverá forma de fazer isto?
Eu apenas preciso fazer download desses arquivos mas apenas os mais recentes, tipo os 10 mais recentes contidos na pasta.
Haverá forma de fazer isto?
Tópico encerrado , respostas não são mais permitidas