2013-01-06 7 views
10

Có bất kỳ sự cố bảo mật hoặc hiệu suất nào khi phân phối Debug so với việc xây dựng công khai Release không?Gỡ lỗi và phát hành tối ưu hóa .net (mối quan tâm khi phân phối cho người dùng)

Hầu hết thời gian tôi chỉ đóng gói tệp .exe trong thư mục Debug (cùng với các phụ thuộc bắt buộc) và cung cấp cho người dùng.

Có lý do nào để chọn nhiều hơn số khác được phân phối không?

+0

Cũng thấy [hiệu suất-sự khác biệt-giữa-gỡ lỗi và phát hành-xây dựng? Lq = 1] (http://stackoverflow.com/questions/4043821/performance-differences-between-debug-and-release-builds ? lq = 1) – nawfal

Trả lời

8

Không có vấn đề bảo mật nào mà tôi có thể nghĩ đến. Có chắc chắn nhất là một vấn đề hiệu suất, xây dựng Debug của hội đồng của bạn có chứa một thuộc tính (DebuggableAttribute) mà sẽ luôn luôn ngăn chặn các trình tối ưu hóa jitter từ tối ưu hóa mã. Điều này có thể tạo ra sự khác biệt lớn về mức độ hoàn hảo của chương trình đang chạy. Tối ưu hóa được thực hiện bởi jitter được ghi lại trong this answer.

Bạn có thể gặp sự cố với mức tiêu thụ bộ nhớ. Bộ thu gom rác sẽ hoạt động khác nhau, giữ các biến cục bộ còn sống cho đến khi kết thúc phần thân phương thức. Đây là một trường hợp góc và một vấn đề như vậy nên đã được chẩn đoán trong khi thử nghiệm ứng dụng, giả sử bạn đã sử dụng dữ liệu thực tế.

Cụ thể đối với VB.NET, vận chuyển bản dựng Gỡ lỗi có thể dễ dàng khiến chương trình của bạn gặp sự cố với OutOfMemoryException khi nó chạy trên máy của người dùng mà không có trình gỡ rối đính kèm. Nó không thành công do rò rỉ trên WeakReferences, được sử dụng bởi Edit + Continue để theo dõi các lớp có trình xử lý sự kiện với từ khóa WithEvents.

Nếu bạn không có nhu cầu về các cải tiến perf được tạo ra bởi trình tối ưu hóa jitter và không gửi các hội đồng VB.NET thì không có gì phải lo lắng nhiều.

9

Có, tất nhiên là có cả các tác động về an ninh và hiệu suất.

Bản dựng gỡ lỗi chứa nhiều thông tin hơn so với bản dựng bản phát hành và tối ưu hóa nhiều trình biên dịch bị tắt để gỡ lỗi xây dựng.

Cũng xem Debug/Release difference tại đây.


Có lý do nào để thích một nhiều hơn khác được phân phối?

Có. Nếu bạn muốn có một nhị phân nhanh hơn đã được biên dịch với tối ưu hóa, hãy sử dụng release.

+2

Hanselman nhận được điều này khá sai (như thường lệ), bản phát hành mặc định phát hành thực tế tạo ra các biểu tượng gỡ lỗi. Nó không phải là rất có liên quan đến câu hỏi này anyway, họ không ảnh hưởng đến bất cứ điều gì và bạn chỉ cần không tàu pdbs. –

+0

@HansPassant - Cảm ơn vì điều đó. Tôi nghĩ rằng các biểu tượng chỉ có trong pdbs và đó là một chút lạ trong bài viết. – Oded