2010-07-26 42 views
9

Tôi đã từng tham gia vào Delphi trong nhiều năm và tôi luôn tự hỏi tại sao tối thiểu hóa và khôi phục một ứng dụng khiến nó sử dụng ít bộ nhớ hơn? Một ví dụ tôi đang sử dụng delphi 7 và tôi tạo ra một dự án mới mà không có gì trên nó nhưng hình thức trống tất cả các dự án bắt đầu với và sau đó tôi nhấn F9 để chạy ứng dụng và sau đó nhìn vào việc sử dụng bộ nhớ cho ứng dụng và nó đang ở khoảng 3.5mb, sau đó giảm thiểu ứng dụng và mức sử dụng bộ nhớ giảm xuống khoảng 760kb và sau đó cuối cùng tôi khôi phục ứng dụng và mức sử dụng bộ nhớ tăng lên khoảng 1.5mb, xấp xỉ 1/2 nó đầu tiên được tải và điều này luôn làm tôi bối rối về điều làm cho điều này xảy ra và thậm chí nhiều hơn đến mức có thể bắt đầu ứng dụng với một số chỉ thị làm cho nó sử dụng 1,5MB bộ nhớ thay vì 3,5MB mà nó thường sử dụng.Delphi - Thu nhỏ & khôi phục sẽ giải phóng bộ nhớ?

Chúc mừng, Dave

+0

"Bộ nhớ" là định nghĩa rất mơ hồ. Những gì bạn thấy đang làm việc giảm dần. Bạn cũng có thể thấy bài viết này hữu ích: http://blog.eurekalog.com/catching-memory-leaks/ – Alex

+0

Nó chỉ mơ hồ sau khi bạn làm việc cho Microsoft đủ lâu. –

Trả lời

5

có thể là điều gì đó có quản lý bộ nhớ cửa sổ. cố gắng điều tương tự với các cửa sổ máy tính và hành vi này là :) giống nhau)

đây một câu trả lời: http://support.microsoft.com/?kbid=293215 và một số người có cùng một câu hỏi: http://digital.ni.com/public.nsf/allkb/9EA3D4258E037B8A8625763300434D4D

Trân trọng,

+0

Cảm ơn bạn đã trả lời Tôi tò mò hơn bất cứ điều gì khác ít nhất bây giờ tôi biết nó không chỉ là ứng dụng của tôi không phải là những người duy nhất làm điều này. Cảm ơn lần nữa, Dave – dave

+0

+1 cho bài viết KB – Alex

+0

Đây là một ví dụ điển hình về Windows nơi tôi thường nói, khi tôi tìm hiểu xem họ đã làm gì: "[chèn tuyên bố không đúng ở đây] Tôi không thể tin được rằng ! " Windows là loại lời nói dối với bạn, bởi vì họ không thể tìm ra những điều mà họ có thể nói với bạn là gần nhất với điều mà bạn muốn biết, như bao nhiêu bộ nhớ là ứng dụng này sử dụng. Vì vậy, họ đã chọn một trong những điều họ biết làm thế nào để tính toán, và dán nhãn nó với một nhãn ngắn thân thiện với người dùng nhưng không chính xác; "đây là một trong những bạn đang tìm kiếm", khi rõ ràng, nó không phải là. –

4

Here you can find rất giải thích rõ ràng từ Ian Martins. Khi ứng dụng thu nhỏ hệ thống, hãy gọi thủ tục SetProcessWorkingSetSize để có bộ nhớ không hoạt động miễn phí của quá trình.

Bạn có thể thực hiện tương tự việc thêm mã này vào ứng dụng của mình. Trong nút OnClick, bạn có thể thực hiện việc này:

procedure LiberarMemoria; 
begin 
    if Win32Platform = VER_PLATFORM_WIN32_NT then 
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); 
end; 

Hiệu ứng cũng tương tự như giảm thiểu ứng dụng. Nếu ứng dụng của bạn thực hiện một số nhiệm vụ thì cuối cùng, bạn sử dụng một khối bộ nhớ lớn, bạn có thể buộc nó miễn phí sau khi sử dụng nó, sử dụng mã nhỏ này.

Kính trọng

+0

Nó sẽ giúp tôi nếu lời giải thích rõ ràng từ Ian Marteens bằng tiếng Anh ... –

+2

Trích dẫn từ liên kết được chỉ định: "Điều đơn giản nhất sẽ chạy từ bộ hẹn giờ, mỗi phút, ví dụ". Phải, đúng vậy. Tránh xa bài viết này vì lợi ích của riêng bạn. – Alex

+1

@Alexander xin vui lòng, kiểm tra và đọc bình luận của tôi một cách cẩn thận và thấy rằng bất cứ nơi nào tôi đã đề nghị phát hành bộ nhớ được thực hiện mỗi phút. Tôi đã nói: "... Nếu ứng dụng của bạn thực hiện một số tác vụ nào đó THỬ NGỪNG sử dụng một khối bộ nhớ lớn, bạn có thể buộc nó miễn phí SAU KHI SỬ DỤNG CNTT" (1) Cuối cùng (2) SAU KHI SỬ DỤNG CNTT, không phải Mỗi phút . Tôi đã đề xuất nó, để giải thích và cho mã. Xin vui lòng, đọc carrefully các phản ứng. P.D: Xin lỗi vì tiếng Anh. –

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