2012-05-18 37 views
5

Theo Visual Studio 2005 chúng tôi có một thư viện w/195 cpp tệp mất khoảng 2 phút để xây dựng để phát hành nhưng khoảng 6 phút để xây dựng để gỡ lỗi.Gỡ lỗi xây dựng biên dịch chậm hơn nhiều so với phát hành

Tôi luôn nghĩ rằng bản phát hành bản phát hành sẽ mất nhiều thời gian hơn vì tối ưu hóa. Tại sao một bản dựng gỡ lỗi mất nhiều thời gian hơn bản phát hành? Có anyway để tăng tốc độ gỡ lỗi của chúng tôi xây dựng để được nhanh như phát hành?

Chúng tôi có số tiền tăng/stl hợp lý.

+1

Bạn có đang sử dụng các tiêu đề được biên dịch sẵn trong cả hai không? –

+0

Tùy chọn xây dựng là gì? –

+1

Có PCH trên cả hai. Các tùy chọn xây dựng bên cạnh/I/D PCH là:/Od/Gm/EHsc/RTC1/MDd/W4/nologo/c/Wp64/ZI/TP/lỗiReport: nhắc/wd4018/Zm200. Vâng, tôi đã tự hỏi nếu chúng tôi đã "viết một số tập tin tùy chọn lớn" trong đó. Thời gian chỉ là xây dựng thư viện để không có liên kết. – Philip

Trả lời

0

Tôi sẽ đặt bình luận của starbolin xuống đây là câu trả lời: táo và cam. charley của đoán của I/O giới hạn dường như không pan ra với quá trình tính toán màn hình của tôi 600MB bằng văn bản cho gỡ lỗi và 300MB để phát hành. Nghĩa là, viết thêm 300MB sẽ mất vài giây, không phải 4 phút.Vì vậy, tôi kết luận rằng có khả năng chỉ là một loạt những điều khác nhau giữa các bản dựng Debug và Release. Mặc dù tối ưu hóa sẽ mất nhiều thời gian hơn không có tối ưu hóa, nhưng các hoạt động chỉ gỡ lỗi khác này phải mất nhiều thời gian hơn thế. Sẽ là tốt đẹp để xem một phân tích chính xác nơi mà thời gian đi cho Debug và phát hành, nhưng có vẻ như rõ ràng họ là các quá trình khá khác nhau và Debug chỉ mất nhiều thời gian hơn, ít nhất là cho Visual Studio 2005 và dự án tôi chuẩn.

7

Dự đoán tốt nhất: Trình gỡ lỗi được I/O giới hạn, trong khi Bản phát hành bản phát hành là bộ xử lý giới hạn (trong trường hợp này).

Chúng tôi đã thực hiện đánh giá rộng rãi trên hệ thống xây dựng của mình - rất nhiều dự án lớn, một số dự án nhỏ. Các bản dựng DEBUG ghi nhiều thông tin *.pdb, lớn hơn nhiều *.obj tệp (để biết thêm thông tin gỡ lỗi), v.v. Kết quả là hoạt động đĩa nhiều hơn. Này được nhấn mạnh hơn nữa nếu bạn có rất nhiều "literals" trong mã nguồn của bạn (bảng biểu, biểu tượng, chuỗi literals) vv

Ngược lại, RELEASE xây dựng viết ra nhiều nhỏ *.obj tập tin, và doesn không bận tâm viết cơ sở dữ liệu "gỡ lỗi" (nếu bạn biên dịch RELEASE với các công tắc thông thường). Tuy nhiên, mối liên kết trong các bản dựng RELEASE phải thực hiện tối ưu hóa của nó và các công việc đáng kể khác mà không được thực hiện trong DEBUG, do đó, nó bị ràng buộc bởi bộ vi xử lý. Điều này sẽ bị phạt thêm một thời gian cho RELEASE nếu bạn "biên dịch thành tối đa tốc độ/kích thước" với các thiết bị chuyển mạch khó kết nối nhất.

(Tuy nhiên, có, RELEASE xây dựng vẫn phải là I/O cập nhật địa chỉ trong tệp thực thi được xây dựng trên đĩa, nhưng vì tệp thực thi nhỏ hơn rất nhiều trong bản dựng RELEASE, bạn ít hơn, vì vậy các I/O phạt trong RELEASE xây dựng không phải là càng nhiều càng tốt cho DEBUG xây dựng.)

Bạn đang quan sát một 3x "RELEASE đắt hơn DEBUG". Đó là về quyền đối với một số dự án mà tôi/O-ràng buộc với rất nhiều mẫu, nhiều biểu tượng và literals, vv Kiểm tra ổ đĩa của bạn - là họ nhận được đầy đủ, hoặc chỉ "chậm ổ đĩa", và/hoặc với một số lĩnh vực xấu ? Những người sẽ làm cho nó tồi tệ hơn (chậm hơn) cho các xây dựng DEBUG.

Có, các bản dựng khác phải là hình thức khác, với "RELEASE thứ gì đó như 3x đắt hơn DEBUG". Những bản xây dựng đó là bộ xử lý/liên kết ràng buộc, chứ không phải là I/O-bound.

[CẬP NHẬT], tôi thấy trong nhận xét-on-the-câu hỏi rằng điều này là dành cho "thư viện tĩnh, không liên kết". Đó là khá nhiều trường hợp xấu nhất-kịch bản cho một hình phạt thời gian cho I/O (rất nhiều hoạt động đĩa, không có liên kết), và không có một bộ xử lý-phạt (vì không có tối ưu hóa đang được thực hiện). Vì vậy, nếu bạn có 3x "DEBUG -is-slow-than-RELEASE", đó có thể là xấu như nó có thể nhận được (cho dự án này), và đó không phải là điển hình. Khi bạn thêm tùy chọn liên kết, số RELEASE sẽ chậm hơn.

+2

Viết các tập tin thực sự rẻ trong Windows nhờ vào hệ thống tập tin của bộ nhớ đệm lười biếng ghi lại. Câu trả lời này chỉ có ý nghĩa nếu máy bị hạn chế RAM nghiêm trọng. Có thể xảy ra, nhưng tạo ra một gigabyte giá trị của đối tượng/dữ liệu gỡ lỗi không phải là dễ dàng. –

+0

@Hans, sắp xếp đồng ý. Lazy-viết giúp đỡ, nhưng chúng tôi đã tìm thấy NTFS là đáng ngạc nhiên tốn kém cho hầu như tất cả các hoạt động tập tin so với các hệ thống tập tin khác. Nếu tệp được lưu trữ/chuyển qua tài nguyên mạng, tất nhiên, viết lười sẽ không giúp gì cả (ví dụ: xây dựng trang trại, hệ thống xây dựng được phân phối). Win7 đã bổ sung thêm tính năng xử lý hình phạt/độ trễ trên XP/Vista (do các cải tiến bảo mật của Win7) và khiến chúng tôi gặp phải các vấn đề về xử lý tệp/cổng với các hệ thống nhúng của chúng tôi. – charley

+1

[Bài đăng trên blog này] (http://blogs.microsoft.co.il/blogs/arik/archive/2011/05/10/how-to-check-how-many-writes-are-done-while-you -build.aspx) mô tả cách đo byte được viết bằng gỡ lỗi và phát hành. Lưu ý bạn phải theo dõi devenv.exe và cl.exe. Nó xuất hiện khoảng 300MB được viết để phát hành và 600MB được viết để gỡ lỗi. Tôi đã thử nghiệm chỉ trong vỏ sao chép 1GB công cụ và mất khoảng 10 giây. Vì vậy nó không _seem_ với tôi rằng viết ở thêm 300MB thực sự có thể mất 4 phút nữa. Phải có hoạt động trình biên dịch khác mà mất một thời gian dài bên cạnh chỉ IO. – Philip

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