Jestem w bardzo wrażliwym na wydajność fragmencie mojego kodu (C#/WPF) i potrzebuję wykonać operację modulus pomiędzy dwiema wartościami System.TimeSpan w najszybszy możliwy sposób.Jak mogę uzyskać operację modułem z wartościami System.TimeSpan, bez pętli?
Ten kod będzie działał tysiące razy na sekundę, a ja zdecydowanie wolałbym uniknąć ręcznego obliczania pętli - za wszelką cenę.
Pomysł module między dwoma TimeSpans może wydawać się trochę dziwne, więc pozwólcie mi wyjaśnić -
że mamy
TimeSpan A = 1 minuta 30 sekund
TimeSpan B = 20 sekund
Tutaj miałaby postać listy typowych operacji i rozsądnych wyników:
a + B = (TimeSpan) 1 minuta 50 sekund
a - B = (TimeSpan) 1 minuta 10 sekund
A * B = Nie ma uzasadnionego sposobu obliczania
Mamy powinniśmy móc pomnożyć TimeSpan przez liczbę całkowitą. A * 5 = (TimeSpan) 7 minut 30 sekund
Firma Microsoft nie zaimplementowała mnożenia między TimeSpans a liczbami całkowitymi.
A/B = (int) 4 lub (podwójne) 4.5
Ta operacja nie jest zaimplementowana bezpośrednio w środowisku .NET, ale ma sens.
Istnieje 4,5 B w A (4,5 * 20 = 90)
A% B = (zakresu czasu) 10 sekund
względu rozsądny podział TimeSpan, TimeSpan moduł powinien być bardzo prosta.
A/B naprawdę równa się (int) 4 pozostałość (TimeSpan) 10 sekund. Iloraz i reszta to różne typy danych, co może być powodem, dla którego Microsoft nie zaimplementował tego bezpośrednio.
Potrzebuję znaleźć skuteczny sposób obliczenia tego bez pętli. Normalnie nie byłbym przeciwny krótkiej pętli, ale te TimeSpany mogą się znacznie różnić. Im większa wykładnicza różnica między TimeSpans, tym większy iloraz. Im większy iloraz, tym więcej powtórzeń będzie musiało wykonać "pętla dzielenia". Jest to zależność, której nie mogę dopuścić w tej części mojej aplikacji.
Czy mają Państwo jakieś pomysły?
Odpowiedź była tak rażąco prosta. Czuję się jak dunce, haha. Dziękuję! – Giffyguy
Po udzieleniu odpowiedzi wszystko wygląda prosto. –