2010-05-04 22 views
8

Tôi có một dự án C++ kế thừa mất một thời gian khó chịu để xây dựng (vài phút, ngay cả đối với những thay đổi nhỏ), và tôi thấy phần lớn thời gian đã được liên kết.Visual C++ 2008: Tìm nguyên nhân của thời gian liên kết chậm

Dự án đã sử dụng các tiêu đề được biên dịch trước và biên dịch gia tăng. Tôi đã bật tính năng "/ thời gian" tham số dòng lệnh với hy vọng tôi sẽ biết thêm chi tiết về những gì đang chậm lại các mối liên kết, và nhận được kết quả như sau:

1>Linking... 
1> MD Merge: Total time = 59.938s 
1> Generate Transitions: Total time = 0.500s 
1> MD Finalize: Total time = 7.328s 
1>Pass 1: Interval #1, time = 71.718s 
1>Pass 2: Interval #2, time = 8.969s 
1>Final: Total time = 80.687s 
1>Final: Total time = 80.953s 

Có cách nào để biết thêm chi tiết về mỗi các bước này? Ví dụ: Tôi muốn tìm xem liệu họ có dành hầu hết thời gian liên kết đến một tệp .lib hoặc .obj cụ thể không.

Ngoài ra, có bất kỳ tài liệu nào giải thích những gì từng bước này thực hiện không?

+0

Chỉ để biết thông tin, có bao nhiêu tệp .cpp mà chúng ta đang nói đến ở đây? Để tham khảo vui, chúng tôi đã có một ứng dụng một vài năm trước đây mất 12h để liên kết (yep, một thư viện humongous). Rất may nó đã được chia nhỏ trong vài chục thành phần và phần cứng bây giờ tốt hơn;) –

+0

180 tệp trải rộng trên 10 dự án + phụ thuộc vào 8 tệp .lib bên ngoài (MFC + các thư viện độc quyền khác); do đó, đó là một số lượng hợp lý của các tập tin trong quan điểm của tôi. Tuy nhiên, cấu trúc có thể được cải thiện bằng cách tách một số dự án. (12h thật khủng khiếp, làm cách nào bạn quản lý để hoàn thành công việc?) – ckarras

+0

Phiên bản Whcich? Bạn đã bật Tối ưu hóa mã thời gian liên kết hoặc Tối ưu hóa hướng dẫn Profiler chưa? – peterchen

Trả lời

1

Hy vọng rằng một người nào đó từ nhóm phát triển vs sẽ thấy điều này và có thể nhận xét, có thể đăng liên kết lên diễn đàn/blog của họ và tốt nhất?

Lý thuyết ngẫu nhiên đầu tiên đến với tôi sẽ là điều tra xem có bao nhiêu mã trong tiêu đề được tạo, chẳng hạn như "giai đoạn 1" sẽ có rất nhiều công việc để loại bỏ sự lừa đảo. Tôi đặc biệt nghĩ về các bản mẫu hoặc các khai báo hằng số kiểu macro hoặc kiểu cũ. Đây cũng sẽ được tăng thêm bằng cách đưa vào một tiêu đề biên dịch phổ biến như tôi đã thấy rất thường xuyên thiết lập ngây thơ cho các cửa sổ/mfc/STL sử dụng các dự án.

Chúc bạn may mắn, thật tuyệt vời nếu bạn tìm thấy điều gì đó đặc biệt xấu.

3

Bước "MD Merge" đang tìm và hợp nhất các chuỗi ký tự chuỗi trùng lặp và các dữ liệu trùng lặp khác. Lưu ý rằng thời gian cần thiết để thực hiện điều này là O (n^2) so với số chuỗi ký tự mà bạn có, vì vậy tôi đã từng gặp vấn đề tương tự khi tệp tiêu đề có ~ 10K chuỗi ký tự sẽ mất 5 phút để liên kết.

Thêm cờ liên kết /OPT:NOICF có thể trợ giúp. Cách khác, kiểm tra lý do tại sao bạn có quá nhiều chữ để gấp.

+0

Tại sao nó là O (N²)? Có vẻ như nó sẽ là O (n log n)? –

+0

Từ tài liệu - 'Tham số lặp tùy chọn chỉ định số lần di chuyển các biểu tượng cho các bản sao. Số lần lặp mặc định là hai. Các lần lặp bổ sung có thể định vị nhiều bản sao được phát hiện thông qua việc gấp trong lần lặp trước đó. –

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