tôi có phương pháp dll mà nên là "QoSed" - phương pháp này nên được gọi là tối đa 100 lần mỗi giây .:Cách tốt nhất để đếm bao nhiêu lần mỗi giây phương pháp này được gọi là
private static extern int ExecTrans(int connectionId);
Phương pháp này chỉ được sử dụng ở một nơi trong chương trình vì vậy nó ok để qos nơi này. Tôi cần "bộ đếm qos" riêng biệt cho mỗi connectionId
. Vì vậy, ExecTrans(1)
và ExecTrans(2)
nên đi đến các quầy khác nhau.
Ở lần lặp đầu tiên, tôi muốn đếm tần suất phương thức được gọi (đối với mỗi connectionId
). I E. Tôi muốn có "số liệu thống kê trực tiếp". Có hai cách tiếp cận:
- allow to exceed limitiation for a short period. for example allow "100 transaction from 0 to 1 second, 100 transaction from 1 to 2 seconds and 200 transactions from 0.5 to 1.5 second".
- at any second interval transactions should not exceed 100.
Hiện tại tôi không quan tâm đến phương pháp nào trong số này nhưng tôi sẽ chọn phương pháp nào tạo ít chi phí hơn. Tôi muốn qos để thêm càng ít "làm việc" càng tốt vì nó là phần mềm giao dịch nhạy cảm với mỗi 0,1 ms.
Đối với phương pháp tiếp cận đầu tiên tôi nghĩ rằng tôi có thể sử dụng một cái gì đó như thế (pseude mã, có lẽ stats
và curStats
nên được thread-safe):
private int[] stats // statistic to display to user
private int[] curStats; // statistic currently collection
OnOneSecondElapsed(object source, ElapsedEventArgs args) {
foreach (conId : connIds) {
stats[conId] = curStats[conId];
curStats[conId] = 0;
}
}
myMethod {
......
ExecTrans(conId);
++curStats[conId];
......
}
Đối với cách tiếp cận thứ hai .... là nó có thể tạo ra một bộ sưu tập nơi các đối tượng sống chính xác trong một giây và sau một giây biến mất? Sau đó, mỗi lần tôi sẽ thêm đối tượng tiếp theo vào một bộ sưu tập trừ khi bộ sưu tập chứa 100 đối tượng.
Bạn nghĩ gì? Tôi không phải là familar với các tập tin thư viện C# vì vậy có lẽ tôi đang thiếu một số classess hữu ích, có lẽ bạn có thể đề xuất một cách tiếp cận khác.
Tôi đoán có một số nhầm lẫn về việc phải làm gì khi đạt đến giới hạn. Thả các mục công việc mới? Thả các mục công việc cũ (Nếu chúng không xảy ra nội tuyến)? Giới thiệu tạm dừng? –
giới thiệu tạm dừng – javapowered
Sau đó, có thể thêm spinlock khi số đếm cao hơn 100 để kiểm tra lại. –