Tôi bắt đầu làm việc với C# cách đây vài tuần và tôi đang ở trong tình huống mà tôi cần xây dựng cờ "bit set" để xử lý các trường hợp khác nhau trong thuật toán. Tôi có nên hai lựa chọn:Bất kỳ cải tiến hiệu suất đáng kể nào bằng cách sử dụng toán tử bitwise thay vì các số tiền int thuần trong C#?
enum RelativePositioning
{
LEFT = 0,
RIGHT = 1,
BOTTOM = 2,
TOP = 3,
FRONT = 4,
BACK = 5
}
pos = ((eye.X < minCorner.X ? 1 : 0) << (int) RelativePositioning.LEFT)
+ ((eye.X > maxCorner.X ? 1 : 0) << (int) RelativePositioning.RIGHT)
+ ((eye.Y < minCorner.Y ? 1 : 0) << (int) RelativePositioning.BOTTOM)
+ ((eye.Y > maxCorner.Y ? 1 : 0) << (int) RelativePositioning.TOP)
+ ((eye.Z < minCorner.Z ? 1 : 0) << (int) RelativePositioning.FRONT)
+ ((eye.Z > maxCorner.Z ? 1 : 0) << (int) RelativePositioning.BACK);
Hoặc:
enum RelativePositioning
{
LEFT = 1,
RIGHT = 2,
BOTTOM = 4,
TOP = 8,
FRONT = 16,
BACK = 32
}
if (eye.X < minCorner.X) { pos += (int) RelativePositioning.LEFT; }
if (eye.X > maxCorner.X) { pos += (int) RelativePositioning.RIGHT; }
if (eye.Y < minCorner.Y) { pos += (int) RelativePositioning.BOTTOM; }
if (eye.Y > maxCorner.Y) { pos += (int) RelativePositioning.TOP; }
if (eye.Z > maxCorner.Z) { pos += (int) RelativePositioning.FRONT; }
if (eye.Z < minCorner.Z) { pos += (int) RelativePositioning.BACK; }
tôi có thể đã sử dụng một cái gì đó như ((eye.X > maxCorner.X) << 1)
nhưng C# không cho phép ép kiểu ngầm từ bool để int và các nhà điều hành ternary là đủ tương tự. Câu hỏi của tôi bây giờ là: có cải thiện hiệu suất nào trong việc sử dụng phiên bản đầu tiên trong lần thứ hai không?
Cảm ơn bạn
Tommaso
chuẩn trước khi thực hiện vi tối ưu hóa –
Đồng ý với Mitch Wheat. Cũng thích khả năng đọc hơn hiệu suất, trừ khi bạn có thể chứng minh một nút cổ chai với một hồ sơ. – OregonGhost
"Chúng ta nên quên đi hiệu quả nhỏ, khoảng 97% thời gian: tối ưu hóa sớm là gốc rễ của tất cả các điều ác" Donald Knuth – Cagdas