Esiste un modo più efficiente di fare quanto segue, qualcosa ci sembra semplicemente sbagliato? Sto cercando il modo più efficiente di logging logaritmico.Registrazione logaritmica 1, 10, 100, 1000, ecc.
public bool Read()
{
long count = Interlocked.Increment(ref _count);
switch (count)
{
case 1L:
case 10L:
case 100L:
case 1000L:
case 10000L:
case 100000L:
case 1000000L:
case 10000000L:
case 100000000L:
case 1000000000L:
case 10000000000L:
case 100000000000L:
case 1000000000000L:
case 10000000000000L:
case 100000000000000L:
case 10000000000000000L:
case 100000000000000000L:
case 1000000000000000000L:
_logger.LogFormattable(LogLevel.Debug, $"{count} Rows Read");
break;
}
return _reader.Read();
}
Aggiornamento:
Qui sono i miei test di benchmark micro.
- Method1: il modo di Übercoder con tenere il passo con lo stato
- Method2: Il mio modo con il grande istruzione switch
- method3: modo di Markus Weninger con la bella funzione matematica
Dal momento che per me 100.000.000 i record letti senza registrazione impiegano circa 20 minuti, mentre altri 4 secondi non sono nulla. Vado con il bellissimo modo di fare la matematica. Mathod3 vince nel mio scenario.
Run time for 100,000,000 iterations averaged over 100 attempts
Method1 Max: 00:00:00.3253789
Method1 Min: 00:00:00.2261253
Method1 Avg: 00:00:00.2417223
Method2 Max: 00:00:00.5295368
Method2 Min: 00:00:00.3618406
Method2 Avg: 00:00:00.3904475
Method3 Max: 00:00:04.0637217
Method3 Min: 00:00:03.2023237
Method3 Avg: 00:00:03.3979303
@Dai che si trova sul punto mobile, che non è il caso qui. Anche la domanda riguarda C#, non C++. Se ne hai una migliore, duplicati, fammi sapere. –
L'uso di un'istruzione 'switch' come se fosse davvero il modo più veloce per farlo, poiché verrà compilato in una serie di istruzioni di hashtable a livello di processore che sono velocissime. Mentre il codice è "brutto" (beh, penso che sia un po 'bello) penso che si possa migliorare spostandolo in una funzione separata ('IsExactlyPowerOf10 (Int64 n)") e chiamandolo dalla funzione 'Leggi'. – Dai
Grazie per il bel benchmark di tutti e tre i metodi :) –