2010-08-06 34 views
12

Mức tăng hiệu suất (nếu có) có thể đạt được dịch vụ cửa sổ giữa bản dựng gỡ lỗi và bản phát hành bản phát hành hay không và tại sao?C# Gỡ lỗi và phát hành

+0

Đây là một câu hỏi tuyệt vời có thể được phục vụ tốt bởi một số chỉ số điểm chuẩn, nếu có ai có thể cung cấp cho họ. – kbrimington

+0

có thể trùng lặp của [Gỡ lỗi C# và hiệu suất phát hành] (http://stackoverflow.com/questions/2446027/c-debug-vs-release-performance) –

Trả lời

6

Đối với mã được quản lý, trừ khi bạn có nhiều nội dung được biên dịch có điều kiện cho các bản dựng DEBUG, sẽ có ít khác biệt - IL phải giống nhau. Các Jitter tạo ra khác nhau khi chạy theo trình gỡ lỗi hay không - việc biên dịch để IL không bị ảnh hưởng nhiều.

Có một số điều mà /optimize thực hiện khi biên dịch sang IL, nhưng chúng không đặc biệt tích cực. Và một số trong những tối ưu hóa IL có thể sẽ được xử lý bởi các tối ưu hóa jitter, ngay cả khi chúng không được tối ưu hóa trong IL (như loại bỏ các cảnh sát).

bài viết Xem Eric Lippert của http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx để biết chi tiết:

Các/optimize cờ không thay đổi một số tiền rất lớn phát ra của chúng tôi và logic thế hệ. Chúng tôi cố gắng luôn tạo ra mã đơn giản, có thể kiểm chứng và sau đó dựa vào jitter để thực hiện việc nâng cấp tối ưu hóa nặng nề khi nó tạo ra mã máy thực. Nhưng chúng tôi sẽ thực hiện một số tối ưu hóa đơn giản với bộ cờ đó.

Đọc bài viết của Eric để biết thông tin về /optimize sẽ hoạt động khác trong thế hệ IL.

+0

Nội dung tốt ... về bảo mật thì sao? Nếu bạn gửi/phơi bày thông tin gỡ lỗi, liệu thanh tra có tiết lộ thêm về mã của bạn không? Ngay cả khi có sự khác biệt không đáng kể về hiệu suất, tôi sẽ không gửi mã gỡ lỗi trừ khi tôi phải làm như vậy. –

+1

@Edward: Tôi không thực sự ủng hộ việc phân phối các bản dựng DEBUG, chỉ cần nói rằng bạn có lẽ không nên mong đợi sự khác biệt lớn về hiệu suất giữa DEBUG và RELEASE.Ngoài ra, tôi không nghĩ rằng một xây dựng DEBUG có bất kỳ chi tiết hơn trong lắp ráp chính nó - thông tin gỡ lỗi đi trong tập tin .pdb, mà bạn không cần phải phân phối. Các assembly .NET nói chung khá dễ tháo rời/giải mã (xem công cụ Reflector). Nếu bạn lo lắng về kỹ thuật đảo ngược, có những công cụ gây rối để giúp đỡ điều đó, nhưng tôi thực sự không biết gì về chúng. –

+1

Cảm ơn ... Tôi đã quên về tệp .pdb có thông tin gỡ lỗi. Rất nhiều công cụ obfuscation không phải là đầy đủ bằng chứng và có khả năng đắt tiền. Tôi luôn luôn giả sử nếu ai đó thực sự muốn, họ sẽ nhận được trong. Tôi nên dành nhiều thời gian đổi mới và ít thời gian bảo vệ. –

1

Vâng, mặc dù câu hỏi là một bản sao, tôi cảm thấy rằng một số câu trả lời tốt hơn trong câu hỏi ban đầu là ở phía dưới cùng. Cá nhân tôi đã thấy các tình huống có sự khác biệt đáng kể giữa chế độ gỡ lỗi và chế độ phát hành. (Ví dụ: Property performance, trong đó có sự khác biệt 2x giữa các thuộc tính truy cập trong chế độ gỡ lỗi và chế độ phát hành). Cho dù sự khác biệt này sẽ có mặt trong một phần mềm thực tế (thay vì điểm chuẩn như chương trình) là gây tranh cãi, nhưng tôi đã thấy nó xảy ra trong một sản phẩm tôi đã làm việc.

Từ câu trả lời của Neil về vấn đề ban đầu, từ msdn social:

Nó không phải là tài liệu tốt, đây là những gì tôi biết. Trình biên dịch phát ra một thể hiện của System.Diagnostics.DebuggableAttribute. Trong phiên bản gỡ lỗi, thuộc tính IsJitOptimizerEnabled là True, trong phiên bản phát hành nó là False. Bạn có thể thấy thuộc tính này trong tệp kê khai assembly với ildasm.exe.

Trình biên dịch JIT sử dụng thuộc tính này để tắt tối ưu hóa có thể làm cho việc gỡ lỗi trở nên khó khăn. Những cái mà di chuyển mã xung quanh như vòng lặp bất biến hoisting. Trong các trường hợp được chọn, điều này có thể tạo ra sự khác biệt lớn về hiệu suất. Không thường xuyên.

Điểm ngắt bản đồ đến địa chỉ thực thi là công việc của trình gỡ lỗi. Nó sử dụng tệp .pdb và thông tin được tạo bởi trình biên dịch JIT cung cấp lệnh IL để ánh xạ địa chỉ mã. Nếu bạn sẽ viết trình gỡ lỗi của riêng mình, bạn sẽ sử dụng ICorDebugCode :: GetILToNativeMapping().

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