Viết mã HasFlag dễ đọc trong C# với chi phí runtime tối thiểu
(github.com/KBluePurple)Bối cảnh phát triển
Đây là gói được tạo ra để dễ dàng tránh việc phát sinh garbage do Boxing mỗi khi dùng HasFlag của Enum cơ bản khi phát triển game Unity hoặc sử dụng C#!
Cách hoạt động
Bằng cách sử dụng Source Generator, trong quá trình biên dịch gói sẽ tìm các khai báo enum có [Flag] trong mã và tự động sinh ra phương thức mở rộng HasFlagNonAlloc tùy chỉnh.
Tính năng
Bạn có thể viết mã HasFlag dễ đọc với chi phí runtime gần như bằng không!
var currentState = PlayerState.Idle | PlayerState.Walking;
// HasFlag hiện có (phát sinh Boxing)
if (currentState.HasFlag(PlayerState.Idle))
{
// ...
}
// Cách triển khai kiểm tra HasFlag để tránh Boxing
if ((currentState & PlayerState.Idle) == PlayerState.Idle)
{
// ...
}
// Sau khi cài đặt NonAllocFlagGenerator
if (currentState.HasFlagNonAlloc(PlayerState.Idle))
{
// ...
}
Đây là dự án mã nguồn mở đúng nghĩa đầu tiên tôi làm nên vẫn còn nhiều thiếu sót, nhưng tôi mạnh dạn chia sẻ lên đây!
Hy vọng nó sẽ hữu ích khi bạn viết các đoạn mã nhạy cảm về hiệu năng.
Mọi phản hồi đều rất được hoan nghênh!
Chưa có bình luận nào.