Sono in una porzione del mio codice molto sensibile alle prestazioni (C#/WPF) e ho bisogno di eseguire un'operazione di modulo tra due valori System.TimeSpan nel modo più rapido possibile.Come posso ottenere un'operazione di modulo con i valori System.TimeSpan senza loop?
Questo codice verrà eseguito migliaia di volte al secondo e preferirei evitare di utilizzare un calcolo del ciclo manuale, a tutti i costi.
L'idea di un modulo tra due TimeSpan può sembrare un po 'strano, in modo da permettere di spiegare -
Dire che abbiamo
TimeSpan A = 1 minuto e 30 secondi
TimeSpan B = 20 secondi Qui sarebbe un elenco di operazioni comuni ei loro risultati ragionevoli:
a + B = (TimeSpan) 1 minuto e 50 secondi
a - B = (TimeSpan) 1 minuto 10 secondi
A * B = No Way ragionevole per calcolare
Abbiamo dovrebbe essere in grado di moltiplicare un periodo da un numero intero. A * 5 = (TimeSpan) 7 minuti 30 secondi
Microsoft non ha implementato la moltiplicazione tra TimeSpan e numeri interi.
A/B = (int) 4 o (doppio) 4.5
Questa operazione non è implementata direttamente nel framework .NET, ma ha perfettamente senso.
ci sono 4,5 B in A. (4,5 * 20 = 90)
% B = (TimeSpan) 10 secondi
Dato divisione tempi ragionevoli, TimeSpan modulo dovrebbe essere abbastanza straight-forward.
A/B in realtà uguale a (int) 4 resto (TimeSpan) 10 secondi. Il quoziente e il resto sono tipi di dati diversi, che potrebbero in realtà essere il motivo per cui Microsoft non l'ha implementato direttamente.
Ho bisogno di trovare un modo efficiente per calcolare questo senza fare il ciclo. Normalmente non sarei contrario a un ciclo breve, ma questi TimeSpan potrebbero differire notevolmente. Maggiore è la differenza esponenziale tra i TimeSpans, maggiore è il quoziente. Maggiore è il quoziente, più iterazioni dovranno essere eseguite da un "divide-loop". Questa è una dipendenza che non posso permettere in questa parte della mia app.
Ha qualche idea?
la risposta era così sfacciatamente semplice. Mi sento un idiota, ahah. Grazie COSÌ! – Giffyguy
Tutto sembra semplice una volta ottenuta la risposta. –