2011-01-04 24 views
17

Tôi đã được rà soát thông qua một số IL của một trong các hội đồng của tôi (thông qua ILDasm) và tôi nhận thấy rằng tất cả các phương pháp của tôi bắt đầu với một hướng dẫnnop.Tại sao mã IL được tạo bắt đầu bằng Nop?

Có ai biết tại sao không?

Trả lời

27

Lắp ráp được biên dịch ở chế độ gỡ lỗi. Nop hướng dẫn không làm bất cứ điều gì (tức là không có tác dụng phụ), nhưng hoạt động như một hướng dẫn thuận tiện để đặt điểm ngắt.

Mẹo

Nếu bạn cần một nơi để một breakpoint bổ sung cho mục đích gỡ lỗi, bạn có thể buộc sự bao gồm một Nop trong một Debug xây dựng bằng cách thêm một cặp dấu ngoặc vuông trống, ví dụ

_grid.PreviewMouseRightButtonDown += (sender, e) => 
{ 
    _isRightMouseDown = true; 

    RowColumnIndex cell = _grid.PointToCellRowColumnIndex(e); 
    {} //<------ Adding a Nop allows a breakpoint here. 
}; 
+2

Chúng có bị lãng phí chu kỳ không? – YellPika

+4

@YellPika Đúng vậy. Họ lãng phí chu kỳ không làm gì cả. Chúng là một trong những điều làm cho bản sửa lỗi xây dựng chậm hơn. –

+0

Trình biên dịch JIT nên tối ưu hóa chúng ra khỏi luồng lệnh gốc mặc dù. – devstuff

Các vấn đề liên quan