Tôi đang ở trong phần có hiệu suất rất nhạy cảm với mã của tôi (C#/WPF) và tôi cần thực hiện thao tác mô-đun giữa hai giá trị System.TimeSpan theo cách nhanh nhất có thể.Làm thế nào tôi có thể đạt được một hoạt động mô-đun với các giá trị System.TimeSpan, không có vòng lặp?
Mã này sẽ chạy hàng nghìn lần mỗi giây và tôi rất muốn tránh sử dụng tính toán vòng lặp thủ công - bằng mọi giá.
Ý tưởng về một mô đun giữa hai timespans có vẻ hơi lạ, vì vậy cho phép tôi giải thích -
Giả sử chúng ta có
TimeSpan A = 1 Minute 30 Giây
TimeSpan B = 20 Giây
đây sẽ là một danh sách các hoạt động phổ biến và kết quả hợp lý của họ:
A + B = (TimeSpan) 1 Minute 50 Giây
A - B = (TimeSpan) 1 Minute 10 Giây
A * B = Không có cách hợp lý để tính
Chúng tôi sẽ có thể nhân một TimeSpan cho một số nguyên. A * 5 = (TimeSpan) 7 phút 30 giây
Microsoft chưa triển khai phép nhân giữa TimeSpans và số nguyên.
A/B = (int) 4 hoặc (double) 4.5
Thao tác này không được triển khai trực tiếp trong khuôn khổ .NET, nhưng nó có ý nghĩa hoàn hảo.
Có của 4,5 B trong A. (4,5 * 20 = 90)
A% B = (TimeSpan) 10 Giây
Với bộ phận TimeSpan hợp lý, TimeSpan mô đun nên được khá thẳng về phía trước.
A/B thực sự bằng (int) 4 phần còn lại (TimeSpan) 10 Giây. Thương lượng và số dư còn lại là các loại dữ liệu khác nhau, mà thực tế có thể là lý do tại sao Microsoft không triển khai trực tiếp điều này.
Tôi cần tìm một cách hiệu quả để tính toán điều này mà không lặp. Thông thường tôi sẽ không phản đối một vòng lặp ngắn, nhưng những TimeSpans này có thể khác nhau rất nhiều. Sự khác biệt theo hàm mũ lớn hơn giữa các TimeSpans, lớn hơn thương. Thương số càng lớn thì càng có nhiều vòng lặp "phân chia vòng lặp" sẽ phải thực thi. Đây là một sự phụ thuộc mà tôi không thể cho phép trong phần này của ứng dụng của tôi.
SO có ý tưởng nào không?
Câu trả lời rất đơn giản. Tôi cảm thấy như một dunce, haha. Cảm ơn SO! – Giffyguy
Mọi thứ trở nên đơn giản khi bạn có câu trả lời. –