2015-08-10 14 views
5

Tôi có một số mã python nơi gc.collect() dường như giải phóng nhiều bộ nhớ. Với tính chất đếm tham chiếu của Python, tôi có khuynh hướng nghĩ rằng chương trình của tôi chứa rất nhiều tài liệu tham khảo theo chu kỳ. Vì một số cấu trúc dữ liệu khá lớn, tôi muốn giới thiệu các tham chiếu yếu. Bây giờ tôi cần phải tìm các tài liệu tham khảo vòng tròn, đã tìm thấy một vài trong số những cái hiển nhiên, Tôi tự hỏi liệu người ta có thể phát hiện các tham chiếu vòng tròn và các đối tượng tạo thành vòng rõ ràng hay không. Cho đến nay tôi chỉ thấy hướng dẫn về cách gọi gc.collect et. al.Làm thế nào để tìm ra tài liệu tham khảo vòng tròn cụ thể nào có trong mã

+0

Các đối tượng này có phương thức '__del__' tùy chỉnh không? – Cyphase

+0

Bạn có thể tìm thấy gói [objgraph] (http://mg.pov.lt/objgraph/) hữu ích. Nó sẽ tạo ra một trực quan hóa các tham chiếu giữa các đối tượng. [Đây là một bài đăng trên blog về tham chiếu vòng tròn và đồ thị.] (Http://engineering.hearsaysocial.com/2013/06/16/circular-references-in-python/) – Cyphase

+0

Tôi cũng sẽ chỉ đề cập đến lý tưởng, bạn sẽ loại bỏ các tham chiếu vòng tròn này ở nơi đầu tiên, nếu có thể, thay vì cố gắng làm việc xung quanh chúng :). – Cyphase

Trả lời

0

Trừ khi bạn đang ghi đè các phương pháp __del__, bạn không nên lo lắng về phụ thuộc vòng tròn, vì Python có thể đối phó đúng với chúng.

+0

... cho đến khi bạn cố gắng sử dụng tính năng đa xử lý của python và các đối tượng của bạn không được chọn nữa . IMO là một ý tưởng tốt để suy nghĩ về cách tránh các tham chiếu tuần hoàn khi thiết kế một ứng dụng, bởi vì nó giữ một số cửa mở để tối ưu hóa hiệu suất sau này. Đó là * không * giống như tối ưu hóa sớm. –

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