2008-11-02 27 views
9

Tôi có một ứng dụng tạo và hủy hàng nghìn đối tượng. Có đáng để lưu trữ và tái sử dụng các đối tượng hay quản lý bộ nhớ của Delphi đủ nhanh để tạo và phá hủy các đối tượng nhiều lần không phải là một chi phí lớn (trái ngược với việc theo dõi bộ đệm) Khi tôi nói điều đó, dĩ nhiên tôi đang tìm kiếm để tăng hiệu suất.Có đáng để lưu các đối tượng được tạo bởi Del Memory Memory Manager không?

Trả lời

17

Từ thử nghiệm gần đây - nếu tạo đối tượng không đắt (tức là không phụ thuộc vào tài nguyên bên ngoài - truy cập tệp, đăng ký, cơ sở dữ liệu ...) thì bạn sẽ gặp khó khăn khi đánh bại trình quản lý bộ nhớ của Delphi. Nhanh quá.

Điều đó tất nhiên là nếu bạn đang sử dụng Delphi gần đây - nếu không, hãy lấy FastMM4 từ SourceForge và sử dụng nó thay vì MM nội bộ của Delphi.

6

Chỉ một trình lược tả mới cho bạn biết. Hãy thử cả hai phương pháp tiếp cận trong một vòng lặp chặt chẽ và xem những gì đi ra trên đầu trang :-)

1

Tôi nghĩ điều này phụ thuộc vào mã mà đối tượng của bạn sẽ thực hiện trong quá trình tạo và hủy. Tác động từ TObject.Create và TObject.Destroy thường bị bỏ qua và có thể dễ dàng bị thừa cân bởi bộ nhớ đệm trên cao.

Bạn cũng nên xem xét trạng thái của một đối tượng có thể khác khi được sử dụng lại sau khi được tạo.

0

Thường thì cách duy nhất để nói - là thử nó.

Nếu hiệu suất hiện tại là đủ thì bạn không có nhiều cuộc gọi để thử và tăng nó. Tuy nhiên, nếu bạn có vấn đề về hiệu suất, thì một số bộ nhớ đệm (hoặc thực sự là một số chiến lược khác) có thể hữu ích.

0

Bạn cũng sẽ cần một số chỉ số về tần suất một đối tượng cụ thể (ví dụ) đang được sử dụng. Nếu bạn thường xuyên tham chiếu cùng một bộ dữ liệu, việc lưu bộ nhớ đệm có thể cải thiện hiệu năng nhưng nếu các truy cập được phân phối trên tất cả các đối tượng có thể, thì tốc độ bỏ lỡ bộ nhớ cache của bạn có thể quá cao.

15

Phân bổ bộ nhớ chỉ là một phần nhỏ lý do bạn muốn lưu vào bộ nhớ cache. Bạn cần biết toàn bộ chi phí của việc xây dựng một đối tượng hợp lệ ngữ nghĩa, và so sánh nó với chi phí lấy các mục từ bộ đệm, và không chỉ cho một điểm chuẩn nhỏ: hiệu ứng bộ nhớ cache (cache CPU) có thể thay đổi động lực thời gian chạy. trong một ứng dụng đang chạy trực tiếp thực sự.

Hoặc đặt một cách khác, đo lường và tìm hiểu. Nếu bạn không đo lường, bạn không phải là kỹ thuật, chỉ cần đoán.

+0

Tôi biết bạn đã đúng. Tôi chỉ tự hỏi liệu nó có đáng làm điểm chuẩn trong lĩnh vực này không, hoặc tập trung nỗ lực của tôi ở nơi khác. Tốt công việc với các tính năng mới trong trình biên dịch btw D2009 !! – Steve

3

Bạn hoàn toàn phải đo lường bằng các lần tải trong thế giới thực để trả lời các câu hỏi như thế này. Tùy thuộc vào tài nguyên nào được giữ trong các đối tượng đó, bất kỳ tranh chấp tài nguyên, chi phí xây dựng, kích thước, v.v., câu trả lời có thể làm bạn ngạc nhiên và thậm chí có thể thay đổi tùy thuộc vào bản chất của tải.

Thường rất khó để xác định nơi các vấn đề hiệu suất của bạn sẽ không đo lường.

+0

Tôi nghe những gì bạn đang nói. Tôi chỉ muốn tìm hiểu xem nó thậm chí còn đáng để suy nghĩ về lĩnh vực này! – Steve