2009-08-13 28 views
11

Nếu tệp .pdb (chương trình gỡ lỗi) được bao gồm với một dll thì số dòng xuất hiện trong dấu vết ngăn xếp của bất kỳ ngoại lệ nào được ném. Điều này có ảnh hưởng đến hiệu suất của ứng dụng không?Do .pdbs có làm chậm ứng dụng phát hành không?


Câu hỏi này không phải là về bản phát hành so với gỡ lỗi, ví dụ: tối ưu hóa. Đó là về tác động của việc có các tệp .pdb. Các tệp .pdb có đọc mỗi lần ngoại lệ được ném không? Là thông tin được lưu trữ trong một số cách khi hội đồng được nạp? Hoặc là nó được lưu trữ trong lần đầu tiên một ngoại lệ có liên quan được ném? Nó tạo ra sự khác biệt bao nhiêu?

Trả lời

13

John Robbins đã viết về điều này trong bài viết của mình Do PDB Files Affect Performance?. Câu trả lời đơn giản là không (nếu bạn biên dịch bản phát hành của bạn bằng cả hai công tắc/tối ưu hóa + và/gỡ lỗi):

Điều đó có thể đúng trên các hệ điều hành khác chứ không phải Windows. Nếu bạn nghĩ rằng họ làm, thì tại sao Microsoft xây dựng mọi sản phẩm mà họ gửi cùng với các tệp PDB được bật cho cả bản dựng gỡ lỗi và bản phát hành? Họ đã viết trình biên dịch, họ đã viết trình liên kết và họ đã viết hệ điều hành để họ biết chính xác hiệu ứng là gì. Microsoft có nhiều người tập trung vào hiệu suất hơn bất kỳ công ty phần mềm nào khác trên thế giới. Nếu có bất kỳ tác động hiệu suất nào cả, họ sẽ không làm điều đó. Giai đoạn. Hiệu suất không phải là điều duy nhất ở Microsoft, đó là tất cả.

Ngoài ra:

Khi xây dựng/tối ưu hóa + và/debug chuyển đổi, một DebuggingMode.IgnoreSequencePoints được truyền cho DebuggableAttribute nói với trình biên dịch JIT rằng nó không cần phải tải các tập tin PDB trong để chính xác JIT IL.

Ông cũng có một bài viết khác có tên là PDB Files: What Every Developer Must Know cũng là một nội dung tốt.

6

Không bình thường. PDB và tối ưu hóa là trực giao. Người ta có thể được kích hoạt bất kể giá trị của tùy chọn khác. Tuy nhiên, nó có thể làm giảm hiệu năng nếu bạn muốn sử dụng thông tin chứa trong PDB, như khi bạn đang truy cập StackTrace của một ngoại lệ và nó cần lấy số dòng từ PDB hoặc khi bạn gọi new StackTrace(true).

Nhân tiện, Eric Lippert có related blog entry about compiler optimizations.

+0

Ý của bạn là 'không bình thường'? Khi nào nó sẽ có hiệu lực? Ngoài ra, tôi không thấy làm thế nào thực tế là cả hai có thể có PDBs và cho phép tối ưu hóa trả lời câu hỏi. –

+0

Tôi đã đề cập đến trường hợp cụ thể mà tôi nghĩ rằng nó có thể ảnh hưởng đến hiệu suất: khi bạn cần tra cứu thông tin từ nó khi bạn xây dựng một dấu vết ngăn xếp. Trình biên dịch có thể tạo ra IL giống hệt nhau cho dù PDB có được tạo ra hay không và trình tối ưu hóa JIT cũng không quan tâm liệu PDB có hay không để cho phép tối ưu hóa nó. Kết quả là, khi mã máy được tạo giống hệt nhau, không có lý do gì mà sự tồn tại của PDB sẽ làm giảm hiệu suất. –

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