2009-12-14 30 views
9

Tôi có một truy vấn về tùy chọn trong Delphi để xây dựng có hoặc không có gói thời gian chạy (Project-> Option-> Packages).
Kích thước tệp thực thi có vẻ nhỏ hơn (389KB) khi tôi chọn hộp "Xây dựng với gói thời gian chạy" so với khi tôi bỏ chọn hộp (3,521KB). Tại sao lại như vậy?Tại sao xây dựng với các gói thời gian chạy làm cho tệp EXE nhỏ hơn?

Tôi đang gặp rất nhiều sự cố khi tạo đĩa cài đặt cho nó và không thể tìm ra tệp nào nên được đưa vào trong quá trình cài đặt. Tôi tự hỏi nếu điều này có thể có bất cứ điều gì để làm với nó, nhưng tôi đã thử cả hai tùy chọn rồi.

+1

Tôi cũng tò mò về điều này. Tôi sử dụng EurekaLog, và khả năng rò rỉ bộ nhớ của nó không hoạt động trừ khi bạn xây dựng mà không có các gói thời gian chạy. Vì vậy, tôi đã dành một vài ngày loại bỏ sự cần thiết cho nó. Vì vậy, để thêm vào câu hỏi của bạn, tôi cũng tò mò nếu nó đáng giá để xây dựng VỚI các gói thời gian chạy cho một bản dựng gỡ lỗi, và KHÔNG cho bản phát hành bản phát hành, và nếu có, làm thế nào điều đó có thể được thực hiện? – lkessler

Trả lời

14

Khi bạn xây dựng với các gói thời gian chạy, VCL và RTL được tải từ các gói và vì vậy mã của chúng không cần phải được liên kết vào EXE của bạn. Vì vậy, EXE sẽ nhỏ hơn, nhưng tổng số cài đặt sẽ lớn hơn vì bạn không thể sử dụng liên kết thông minh để giảm kích thước của các gói.

Như bạn đã nhận thấy, việc sử dụng các gói gây rắc rối cho việc dò tìm rò rỉ bộ nhớ, và nó cũng gây rắc rối cho việc gỡ lỗi. Nó thường chỉ đáng giá để sử dụng chúng nếu bạn đang sử dụng các plugin cũng sẽ cần các gói thời gian chạy.

+5

Nó cũng mang lại lợi ích nếu bạn đang chạy nhiều ứng dụng khác nhau trên một máy mà tất cả đều sử dụng VCL - không có ý nghĩa khi tải nó vào bộ nhớ nhiều lần. –

+1

+1 Và ngay cả trong secenario, nơi các plugin có thể cần đến chúng, Bạn hầu như luôn luôn tốt hơn khi thiết kế chúng không yêu cầu các gói thời gian chạy. Bởi vì các plugin này đều bị hỏng khi bạn xây dựng ứng dụng trong phiên bản Delphi mới hơn, iow: bạn không bao giờ có thể nâng cấp lên các công cụ mới hơn và các tác giả plugin cũng không thể làm như vậy. –

+1

Ngoại trừ với gigabyte RAM trên hầu hết các PC, sự cố từ các vấn đề phiên bản và ý tưởng rằng BPL sai có thể được tải từ một nơi nào đó trong đường dẫn của tôi (DLL hell == BPL hell) giữ rất nhiều người từ bao giờ muốn sử dụng một công nghệ trong thực tế. Khả năng chạy hoàn toàn "side-along" sẽ rất tuyệt, nếu BPL có thể tin cậy để chỉ tải cục bộ và bỏ qua môi trường PATH của hệ thống. –

0

Không biết về D2010, nhưng trong D2006 có một tùy chọn trong menu dự án có tên "Thông tin cho ProjectName".

Điều này sẽ cho bạn biết gói nào được bao gồm sau khi bạn biên dịch.

Tuy nhiên, như Mason đã nêu, có rất ít lợi thế khi sử dụng các gói thời gian chạy và một số nhược điểm.

9

Câu trả lời cho đến nay bỏ lỡ một điểm quan trọng: Gói thời gian chạy hữu ích giống như các tệp DLL hữu ích nếu bạn có một bộ ứng dụng hoạt động cùng nhau và được cài đặt cùng nhau. Tất nhiên bạn có thể liên kết VCL và các thư viện của bên thứ ba với tất cả chúng bằng cách xây dựng chúng mà không cần gói, nhưng tùy thuộc vào số lượng ứng dụng và thư viện được sử dụng, kích thước của các ứng dụng này sẽ lớn hơn kích thước của chúng. kích thước của các gói thời gian chạy đó. Điều này sẽ làm cho các gói thiết lập lớn hơn, đó không phải là vấn đề lớn nó từng là.

Nhưng sử dụng tất cả các ứng dụng này cùng một lúc sẽ cũng mang lại tải cao hơn nhiều cho hệ thống. Vì mỗi ứng dụng sử dụng bản sao riêng của VCL và các thư viện khác, tất cả những thứ này cần được nạp từ đĩa vào bộ nhớ, điều này gây ra nhiều I/O hơn. Và sau đó sẽ có một số bản sao của chúng trong bộ nhớ, mỗi bản sao chiếm không gian cho mã. Khi các gói thời gian chạy được sử dụng, mỗi ứng dụng sẽ có vùng bộ nhớ riêng cho dữ liệu, nhưng tất cả chúng sẽ chia sẻ cùng một bản sao của mã của gói trong bộ nhớ.

Đối với một ứng dụng độc lập không có bất kỳ nhu cầu đặc biệt nào, hãy xây dựng mà không cần gói.

+0

Bao nhiêu bộ nhớ 4GB điển hình được lấp đầy? Dù sao, nó vẫn áp dụng phần nào, vì bộ nhớ cache là bộ nhớ quá, và khá tốn kém. Tuy nhiên, tôi nghĩ rằng đó là một trường hợp lý thuyết, vì không phải tất cả các trang của RTL/VCL cũng sẽ hoạt động. –

+1

Vâng, hãy gọi cho tôi theo kiểu cũ, nhưng có đủ bộ nhớ không đủ lý do để lãng phí nó. Đó là loại suy nghĩ đã mang lại cho chúng tôi tình trạng xin lỗi của phần mềm chúng tôi có ngày hôm nay. Máy hiện tại của tôi có 4000 lần RAM và gấp 20000 lần không gian đĩa cứng so với PC đầu tiên của tôi, nhưng có vẻ như hầu hết tất cả các nguồn bổ sung này đều bị lãng phí ... – mghie

+0

Tôi đến từ Hóa học ban đầu, và không có thay thế để đo lường và cảm giác về độ lớn. Cảm giác đó mạnh hơn phản ứng "chất thải" đầu gối. –

1

Một trong những lý do chính để sử dụng các gói thời gian chạy là khi bạn cần độ chi tiết mô-đun để triển khai/cập nhật trên phương tiện không chấp nhận các tệp lớn, chẳng hạn như trên một dây có băng thông thấp.

Bởi vì các gói thời gian chạy vẫn giữ nguyên cho đến khi bạn thay đổi phiên bản Delphi - như mãi mãi cho những người vẫn còn trên D7 ;-) - nó cho phép triển khai phiên bản mới hoặc ứng dụng mới mà không tải trọng RTL/VCL.

Nhưng giống như với các tệp DLL, bạn phải cẩn thận với phiên bản.

+0

Có nghĩa là nếu tôi "Được xây dựng với gói thời gian chạy" thì tôi phải gửi các gói riêng biệt? Xin lỗi nếu điều này là một câu hỏi ngu ngốc. – Snackmoore

+1

Bạn phải gửi các gói với ứng dụng của bạn - và rất cẩn thận khi cài đặt chúng không ghi đè lên phiên bản mới hơn (các gói cập nhật cũng có thể cập nhật tehm). Một trình cài đặt tốt để kiểm tra đúng phiên bản được khuyến khích. –

+1

snackmoore, hầu hết các nhà phát triển Delphi sẽ không bao giờ xây dựng với các gói thời gian chạy trên một bản xây dựng cuối cùng được chuyển cho khách hàng, trừ khi họ cũng muốn làm cho công việc của mình khó khăn hơn. BPL gói chỉ làm cho cuộc sống khó khăn hơn cho bạn, trừ khi bạn thực sự cần chúng vì lý do nào đó (các câu trả lời khác cho bạn biết lý do tại sao bạn có thể cần chúng), sau đó bạn không cần nó, do đó, để nó được. –

3

Về câu hỏi của bạn "tệp nào nên được bao gồm trong quá trình cài đặt": bạn có thể sử dụng Dependency Walker để theo dõi phụ thuộc thư viện.

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