
_Créditos das imagens: ChatGPT
# 🚀 DNATech x TOTVS: Benchmark da Leitura de Arquivos com FWFileReader
## Contexto
A classe [FWFileReader](https://tdn.totvs.com.br/display/public/framework/FWFileReader), fornecida pela TOTVS, promete leitura eficiente de arquivos texto, linha a linha, sem “onerar o IO”.
Na prática, porém, identificamos **erros grotescos** (como veremos abaixo) e uma **queda drástica de performance**, principalmente quando os arquivos estão no **cliente**.
Para superar essas limitações, criamos as classes **FileNavigator** e **FileReadLine**, disponíveis na biblioteca [DNATech](https://github.com/DNATechByNaldoDJ).
Os testes mostram ganhos expressivos de **performance, integridade e consistência**.
---
## 🐞 Issues Encontradas na FWFileReader
Durante a análise foram reportados os seguintes problemas:
* [🐞 Bug: FWFileReader - Finais de linha não removidos corretamente](https://github.com/naldodj/totvs-protheus-open-issues/issues/4)
* [🐛 FWFileReader trata quebras de linha de forma incorreta, resultando em leituras de dados inconsistentes](https://github.com/naldodj/totvs-protheus-open-issues/issues/5)
* [🐞 FWFileReader()\:GetFileSize() retorna `nil` em vez de `0` quando arquivo inexistente](https://github.com/naldodj/totvs-protheus-open-issues/issues/6)
* [🐞 FWFileReader()\:HasLine() processa 1 linha mesmo com arquivo inexistente](https://github.com/naldodj/totvs-protheus-open-issues/issues/7)
---
## 🔍 Metodologia
* Testes com arquivos reais (`FUNCIONARIO.CSV`, `DET_RESCIS.CSV`, `SIT_AFAST_FUNC.CSV` etc.).
* Leituras **sequenciais** e **não-sequenciais**.
* Comparativo **Servidor x Cliente**.
* Métricas: tempo total de processamento, tempo de leitura, integridade do hash (`StrHash`) e desvio padrão dos tempos.
---
## 📊 Resultados
### ⏱️ Comparativo de Tempo de Processamento
| Reader | Contexto | Tempo Total (ms) |
| ------------- | -------- | ---------------- |
| FileNavigator | Servidor | **73** |
| FileReadLine | Servidor | **75** |
| FWFileReader | Servidor | 81 |
| FT\_\* | Servidor | 74 |
| FileNavigator | Cliente | **6.050** |
| FileReadLine | Cliente | **6.220** |
| FWFileReader | Cliente | 257.000 |
---
### 📖 Comparativo de Tempo de Leitura (Reader)
| Reader | Contexto | Tempo Reader (ms) |
| ------------- | -------- | ----------------- |
| FileNavigator | Servidor | **3,5** |
| FileReadLine | Servidor | **4,8** |
| FWFileReader | Servidor | 11,4 |
| FT\_\* | Servidor | 5,1 |
| FileNavigator | Cliente | **5.290** |
| FileReadLine | Cliente | **5.480** |
| FWFileReader | Cliente | 255.000 |
---
## 📌 Casos com dados perdidos ou inconsistentes
* **TOTVS FT\_**\*
* Processou **7356 linhas** em vez de 3678 → **linhas duplicadas**.
* Resultado: **hash divergente** (`StrHash` não bateu com o esperado).
* 🔴 **Perda de integridade**: os dados lidos **não representam o arquivo original**.
* **TOTVS FWFileReader**
* Além da lentidão absurda no cliente, ele **traz dados inconsistentes**.
* Problema registrado: [Issue #5 – FWFileReader trata quebras de linha de forma incorreta](https://github.com/naldodj/totvs-protheus-open-issues/issues/5).
* Necessário “sanitizar” manualmente as linhas para remover caracteres ocultos (`cCRH10`, `cCRH13`), senão o **hash da linha não bate**.
```xBase
//Fix Return Error GetLine(.T.)
cLine:=oFileReader:GetLine(.T.)
//FWFILEREADER tem Bug e retorna cCRH10 ou cCRH13 indevidamente e não bate o Hash da Linha
if (cCRH10$cLine)
cLine:=StrTran(cLine,cCRH10,"")
endif
if (cCRH13$cLine)
cLine:=StrTran(cLine,cCRH13,"")
endif
```
* Outras falhas estruturais já conhecidas:
* `GetFileSize()` retornando **nil** em vez de `0`.
* `HasLine()` processando **linha fantasma** em arquivo vazio.
* **DNATech FileNavigator / FileReadLine**
* ✅ Todos os testes entregaram **hash OK** (dados íntegros).
* ✅ Nenhuma leitura duplicada.
* ✅ Nenhum caractere extra ou inconsistente.
---
👉 Ou seja: o problema **não é só performance** —
* **FT\_**\* corrompe a leitura duplicando dados.
* **FWFileReader** retorna linhas inconsistentes, exigindo correção manual.
* **DNATech** entrega **velocidade + integridade garantida**.
---
## 📌 Conclusões
* ✅ **DNATech entrega até 40x mais performance no cliente.**
* ✅ **Integridade dos dados garantida** (hash idêntico em todas execuções).
* ⚠️ **FWFileReader falha em consistência e performance**, especialmente fora do servidor.
* 🚀 **FileNavigator/FileReadLine permitem leitura não-sequencial e performática**.
---
📂 Códigos e benchmarks completos:
👉 [GitHub - DNATech AdvPL](https://github.com/DNATechByNaldoDJ)
👉 [Testes FileIO](https://github.com/naldodj/naldodj-DataSul2TotvsProtheus/tree/main/fileIO)
---
💡 *Se você lida com grandes volumes de arquivos no Protheus, já sabe: DNATech é sinônimo de velocidade, integridade e inovação.*
---
#DNATech #TOTVS #FWFileReader #FileNavigator #FileReadLine #Performance #Integridade #Benchmark #Protheus #Inovacao
---
📊 Tempo de Processamento (com integridade)
📖 Tempo de Leitura (com integridade)
* ✅ Verde = dados íntegros
* ⚠️ Laranja = inconsistentes
* ❌ Vermelho = duplicados


Torne-se um Sponsor:
🥊(дави)={0.5x[(Налдо)+(Алине)]}🥊
Bom dia, Naldo. O link do DNATech AdvPL não funciona.
ResponderExcluirhttps://github.com/DNATechByNaldoDJ
Excluir