Tôi cần triển khai hàng đợi FIFO cho các thư trên máy chủ trò chơi để nó cần nhanh nhất có thể. Sẽ có một hàng đợi cho mỗi người dùng.Bộ sưu tập nhanh nhất trong C# để triển khai hàng đợi ưu tiên là gì?
Hàng đợi sẽ có kích thước tối đa (cho phép nói 2000). Kích thước sẽ không thay đổi trong thời gian chạy.
Tôi cần ưu tiên thư CHỈ nếu hàng đợi đạt đến kích thước tối đa bằng cách làm việc ngược và xóa thông báo ưu tiên thấp hơn (nếu có) trước khi thêm thư mới.
Một ưu tiên là một int với giá trị có thể là 1, 3, 5, 7, 10
Có thể có nhiều tin nhắn với các ưu tiên như nhau.
Thông báo không thể thay đổi mức ưu tiên của nó khi được phân bổ.
Ứng dụng không đồng bộ để truy cập vào hàng đợi cần được khóa.
Tôi hiện đang triển khai nó bằng cách sử dụng LinkedList làm bộ nhớ cơ bản nhưng có lo ngại rằng việc tìm kiếm và xóa các nút sẽ giữ cho khóa bị khóa quá lâu.
Heres mã cơ bản tôi có vào lúc này:
public class ActionQueue
{
private LinkedList<ClientAction> _actions = new LinkedList<ClientAction>();
private int _maxSize;
/// <summary>
/// Initializes a new instance of the ActionQueue class.
/// </summary>
public ActionQueue(int maxSize)
{
_maxSize = maxSize;
}
public int Count
{
get { return _actions.Count; }
}
public void Enqueue(ClientAction action)
{
lock (_actions)
{
if (Count < _maxSize)
_actions.AddLast(action);
else
{
LinkedListNode<ClientAction> node = _actions.Last;
while (node != null)
{
if (node.Value.Priority < action.Priority)
{
_actions.Remove(node);
_actions.AddLast(action);
break;
}
node = node.Previous;
}
}
}
}
public ClientAction Dequeue()
{
ClientAction action = null;
lock (_actions)
{
action = _actions.First.Value;
_actions.RemoveFirst();
}
return action;
}
}
Không đủ thông tin theo ý kiến của tôi. Các ưu tiên có bị giới hạn hoặc không bị chặn không? Hàng đợi của bạn có chứa một vài chục hoặc các vật phẩm hoặc có khả năng là 10s của 1000s không? Bạn có cần một hàng đợi ưu tiên có thể thay đổi hoặc một hàng đợi không thể thay đổi được không? Bạn có thể liệt kê một số hoạt động được hỗ trợ và độ phức tạp tính toán mong muốn không? Bạn có cần hỗ trợ các hoạt động trong thời gian thực, hoặc được khấu hao O (1) chấp nhận được không? v.v. – Juliet
Những ưu tiên cố định này và phạm vi của chúng là gì? – RBarryYoung
@Juliet: Ha. Tôi hỏi mọi người trong các cuộc phỏng vấn "Bạn sẽ thực hiện hàng đợi ưu tiên như thế nào?" mọi lúc. Hầu hết mọi người hoàn thành công việc, nhưng họ không bao giờ hỏi về phạm vi ưu tiên, số lượng mặt hàng hoặc chi phí hoạt động cần phải có. Bạn, bạn của tôi, được thuê! :) –