Ti aggiorno a step, per problemi di tempo.
Prima cosa: la rete internet fà sempre e comunque da collo di bottiglia, perchè prevede filtri e quant'altro per una connessione ad una rete aziendale (che avviene normalmente tramite VPN).
Lavorare in VPN è generalmente più lento e le latenze si sommano (anche se di poco), inoltre il collo di bottglia (oltre a quanto già detto e alla tua "fibra") è la capacità di banda in ingresso e usicta (upload / download) della tua azienda e di come vengono bilanciati i carichi.
Quando lavorai per una multinazionale, avevo un collegamento 1 Mbit / 640 Kbit da casa mia e comunque mi sembrava una favola ;D
Poi, per lavorare in rete, sopratutto da remoto, è necessario usare delle accortezze:
1) Evitare di fare accessi ricorsivi alla rete stessa: chiamare ricorsivamente funzioni che ad esempio eseguano ricerche di file in rete non è la pratica giusta. La cache, proprio in caso di vpn, non è efficiente anzi tutt'altro.
2) Sfruttare al massimo le funzioni del sistema operativo (lo sò, pregiudica molto spesso la compatibilità e il porting :-\ ), quindi usare le funzioni specifiche (API) per l'accesso alle risorse di rete e usare dei metodi propri per eseguire meno accessi possibile.
3) Fatti una cache personale (assolutamente criptata) dei SID degli account: per accedere al proprietario di un file prima si deve rilevare il SID a cui appartiene in file, successivamente si deve rilevare (revers lookup) il "nome" del SID. Queste api non vengono eseguite in cache, per problemi di sicurezza.
Il SID non cambia per tutta l'esistenza di un account. Quindi se ti fai una tua cache, risparmi un bel pò di tempo (ogni tanto magari l'aggiorni).
N.B.: mi è venuto un dubbio sul fatto che creare la cache dei SID sia lecito o meno :o
4) Lavorare con i thread và benissimo (in ne uso a decine) ma devi ovviamente organizzare bene "le cose". Usare i timer di debug (TStopWatch) per debugare i tempi per confrontare le varie soluzioni è sempre una scelta ottima.
Spero di esserti stato d'aiuto, se mi vengono in mente altre cose ti aggiorno.
Ti allego una unità DIAGNOSTICS che avevo adattato e che ti consente di usare i timer ad alta risoluzione in maniera semplicissima.
Basta che la includi nelle unit dove la usi. Non c'è da inizializzare niente. Puoi istanziare quanti timer vuoi (ovvio che occupano risorse).
Uso:
var TimDebug: TStopWatch;
TimeDebug.StartNew;
........
........ TUO CODICE SU CUI VALUTARE IL TEMPO
........
TimeDebug.Stop;
ShowMessage(TimeDebug.ElapsedMilliseconds.ToString);
Ciao