Non puoi usare l'accesso a sql server per fare queste valutazioni così come se niente fosse.
sql server, come qualunque dbms serio, fa un sacco di cose ‘strane’ : cache della query, cache del risultato, svuotamento della cache, creazione e (finta) chiusura della connessione, reale chiusura della connessione, ecc.
tutto questo per migliorare l'efficienza dell'accesso ai dati MA basandosi su un ‘pattern standard’ di utilizzo.
il pallelismo supportato da sql server NON SERVE per aumentare la quantità di dati trasferita, MA per gestire il maggior numero di client/utenti/connessioni possibile.
Quando trasferisci dati dalla tabella in memoria lo fai già alla massima velocità di trasferimento supportata dall'hatdware. Molto probabilmente stai usando il DMA (direct memory access).
il miglioramento OTTIMO, usando N threads su un'applicazione che e' PERFETTAMENTE parallelizabile, e' avere i tempi di calcolo pari ad 1/N,
MA
“N” non puo' essere piu' grande al numero di thread REALI.
L' hypertreading è un modo ARTIFICIALE di aumentare il numero di thread hardware: sono piu' thread nello stesso core fisico, il che vuol dire che su quel core ci puo' girare COMUNQUE UN SOLO thread alla volta (anche se lo switch di contesto tra un thread e l'altro e' molto piu' efficiente dell'implementazione “classica” basata sul sistema operativo).
Ovviamente sara' SEMPRE di meno. Se sei fortunato e se le cose sono fatte mooolto bene, di poco.
Ma questo e' solo UNO dei tanti possibili approcci al multithreading.