Hướng dẫn how to release memory using in php - cách giải phóng bộ nhớ bằng php
Tôi nhận ra cái thứ hai tránh được chi phí của một cuộc gọi chức năng (cập nhật, thực sự là một cấu trúc ngôn ngữ), nhưng sẽ rất thú vị khi biết liệu cái này có tốt hơn cái kia không. Tôi đã sử dụng 9 cho hầu hết các mã hóa của mình, nhưng gần đây tôi đã xem qua một vài lớp đáng kính được tìm thấy ngoài mạng sử dụng 0 thay thế.update, is actually a language construct), but it would be interesting to know if one is better than the other. I have been using 9 for most of my coding, but I've recently looked through a few respectable classes found off the net that
use 0 instead. Show Có một cái ưa thích, và lý do là gì? hỏi ngày 25 tháng 2 năm 2009 lúc 6:33Feb 25, 2009 at 6:33
Alexalexalex 469K197 Huy hiệu vàng868 Huy hiệu bạc977 Huy hiệu Đồng197 gold badges868 silver badges977 bronze badges Nó đã được đề cập trong trang Hướng dẫn không được đặt vào năm 2009: 9 thực hiện đúng những gì tên của nó nói - không đặt một biến. Nó không buộc giải phóng bộ nhớ ngay lập tức. Người thu gom rác của PHP sẽ làm điều đó khi thấy phù hợp - theo ý định sớm, vì những chu kỳ CPU đó không cần thiết, hoặc muộn như trước khi tập lệnh sẽ hết bộ nhớ, bất cứ điều gì xảy ra trước. (Kể từ năm 2013, trang người đàn ông 3 đó không bao gồm phần đó nữa)Lưu ý rằng cho đến khi PHP5.3, nếu bạn có hai đối tượng trong tài liệu tham khảo tròn, chẳng hạn như trong mối quan hệ cha con, việc gọi unset () trên đối tượng cha sẽ không giải phóng bộ nhớ được sử dụng cho tham chiếu cha mẹ trong đối tượng con. (Cũng sẽ không được giải phóng bộ nhớ khi đối tượng cha được thu thập rác.) Câu hỏi "Sự khác biệt giữa Unset và = Null" nêu chi tiết một số khác biệt: 4 cũng loại bỏ 5 khỏi bảng ký hiệu; Ví dụ:
Al Fohnce 4.06512 Huy hiệu vàng37 Huy hiệu bạc48 Huy hiệu đồng12 gold badges37 silver badges48 bronze badges Đã trả lời ngày 25 tháng 2 năm 2009 lúc 6:50Feb 25, 2009 at 6:50
VoncvoncVonC 1.2M496 Huy hiệu vàng4174 Huy hiệu bạc4927 Huy hiệu đồng496 gold badges4174 silver badges4927 bronze badges 13 3 không thực sự là một hàm, mà là một cấu trúc ngôn ngữ. Nó không phải là một cuộc gọi hàm hơn 1 hoặc 2.language construct. It is no more a function call than a 1 or an 2.Ngoài các vấn đề về hiệu suất, sử dụng 3 làm cho ý định của bạn rõ ràng hơn nhiều.Đã trả lời ngày 25 tháng 2 năm 2009 lúc 8:55Feb 25, 2009 at 8:55
Alex Barrettalex BarrettAlex Barrett 15.7K3 Huy hiệu vàng 50 Huy hiệu bạc51 Huy hiệu Đồng3 gold badges50 silver badges51 bronze badges 7 Bằng cách thực hiện unset () trên một biến, về cơ bản bạn đã đánh dấu biến cho 'bộ sưu tập rác' (PHP không thực sự có một, nhưng ví dụ như lợi ích) vì vậy bộ nhớ không có sẵn ngay lập tức. Biến không còn chứa dữ liệu, nhưng ngăn xếp vẫn ở kích thước lớn hơn. Thực hiện phương thức NULL làm giảm dữ liệu và thu nhỏ bộ nhớ ngăn xếp gần như ngay lập tức. Điều này đã được từ kinh nghiệm cá nhân và những người khác là tốt. Xem các ý kiến của hàm Untet () ở đây. Cá nhân tôi sử dụng unset () giữa các lần lặp trong một vòng lặp để tôi không phải có độ trễ của ngăn xếp có kích thước yo-yo. Dữ liệu đã biến mất, nhưng dấu chân vẫn còn. Ở lần lặp tiếp theo, bộ nhớ đã được PHP và do đó, nhanh hơn để khởi tạo biến tiếp theo. Đã trả lời ngày 25 tháng 2 năm 2009 lúc 6:45Feb 25, 2009 at 6:45
William Holroydwilliam HolroydWilliam Holroyd 3,3441 Huy hiệu vàng20 Huy hiệu bạc25 Huy hiệu Đồng1 gold badge20 silver badges25 bronze badges 3
Theo đó, có vẻ như "= null" nhanh hơn. Kết quả Php 5.4:
Kết quả Php 5.3:
Kết quả Php 5.2:
Kết quả Php 5.1:
Mọi thứ bắt đầu khác với Php 5.0 và 4.4. 5.0:
4.4:
Hãy nhớ rằng microtime (true) không hoạt động trong PHP 4.4 vì vậy tôi phải sử dụng ví dụ microtime_float được đưa ra trong php.net/microtime / ví dụ #1. Đã trả lời ngày 26 tháng 11 năm 2012 lúc 4:12Nov 26, 2012 at 4:12 5 Nó hoạt động theo một cách khác cho các biến được sao chép bằng tham chiếu:
Antti29 2.91512 Huy hiệu vàng36 Huy hiệu bạc36 Huy hiệu đồng12 gold badges36 silver badges36 bronze badges Đã trả lời ngày 2 tháng 8 năm 2012 lúc 2:32Aug 2, 2012 at 2:32
RIADRIADRiaD 46K10 Huy hiệu vàng75 Huy hiệu bạc120 Huy hiệu đồng10 gold badges75 silver badges120 bronze badges 2 Nó làm cho một sự khác biệt với các yếu tố mảng. Xem xét ví dụ này
Ở đây, khóa 'kiểm tra' chính vẫn tồn tại. Tuy nhiên, trong ví dụ này
Chìa khóa không còn tồn tại. Đã trả lời ngày 26 tháng 3 năm 2011 lúc 11:03Mar 26, 2011 at 11:03
Aurisaurisauris 6916 Huy hiệu bạc5 Huy hiệu Đồng6 silver badges5 bronze badges Về các đối tượng, đặc biệt là trong kịch bản tải xuống, người ta nên xem xét bộ thu gom rác đang chạy trong các chu kỳ CPU nhàn rỗi, vì vậy giả định rằng bạn đang gặp rắc rối khi rất nhiều đối tượng đang tải hình phạt thời gian nhỏ sẽ giải quyết bộ nhớ giải phóng. Sử dụng Time_Nanos ngủ để cho phép GC thu thập bộ nhớ. Cài đặt biến thành NULL là mong muốn. Được thử nghiệm trên máy chủ sản xuất, ban đầu công việc tiêu thụ 50MB và sau đó bị dừng lại. Sau khi Nanos ngủ được sử dụng 14MB là mức tiêu thụ bộ nhớ liên tục. Người ta nên nói điều này phụ thuộc vào hành vi GC có thể thay đổi từ phiên bản PHP sang phiên bản. Nhưng nó hoạt động trên PHP 5.3 tốt. ví dụ. Mẫu này (Mã được lấy mẫu Virtuemart2 Nguồn cấp dữ liệu Google)
Đã trả lời ngày 19 tháng 11 năm 2012 lúc 20:23Nov 19, 2012 at 20:23
Bệnh cao tầngOSP 1.4091 Huy hiệu vàng14 Huy hiệu bạc15 Huy hiệu đồng1 gold badge14 silver badges15 bronze badges Đối với hồ sơ và loại trừ thời gian cần thiết:
Nó trở lại 0Kết luận, cả bộ nhớ miễn phí NULL và UNTEN như mong đợi (không chỉ vào cuối quá trình thực hiện). Ngoài ra, việc chỉ định lại một biến giữ giá trị hai lần tại một số điểm (520216 so với 438352) Đã trả lời ngày 1 tháng 7 năm 2017 lúc 23:59Jul 1, 2017 at 23:59
Magallanesmagallanesmagallanes 6.3074 Huy hiệu vàng52 Huy hiệu bạc53 Huy hiệu Đồng4 gold badges52 silver badges53 bronze badges Php 7 đã được thực hiện trong các vấn đề quản lý bộ nhớ như vậy và việc sử dụng giảm tối thiểu. 1Php 7.1 Outpu: mất 0,16778993606567 giây mất 0.16630101203918 giây Đã trả lời ngày 27 tháng 6 năm 2018 lúc 5:54Jun 27, 2018 at 5:54
Ví dụ về mã từ bình luận 2Chạy trong container docker từ hình ảnh 4 và những người khác ..docker container from image 4 and others.. 3Nhưng, với ví dụ khác: 4Results: 5Đã trả lời ngày 12 tháng 7 năm 2020 lúc 10:59Jul 12, 2020 at 10:59
Tôi vẫn nghi ngờ về điều này, nhưng tôi đã thử nó trong tập lệnh của mình và tôi đang sử dụng XDebug để biết nó sẽ ảnh hưởng đến việc sử dụng bộ nhớ ứng dụng của tôi như thế nào. Tập lệnh được đặt trên chức năng của tôi như thế này: 6Và tôi thêm Unset ngay trước mã 1 và nó cung cấp cho tôi: 160200 sau đó tôi cố gắng thay đổi nó với 6 và nó cho tôi: 160224 :)Nhưng có một cái gì đó độc đáo trên so sánh này khi tôi không sử dụng unset () hoặc null, xdebug cho tôi 160144 làm cách sử dụng bộ nhớ Vì vậy, tôi nghĩ rằng việc đưa ra dòng để sử dụng unset () hoặc null sẽ thêm quy trình vào ứng dụng của bạn và tốt hơn là nên giữ nguồn gốc với mã của bạn và giảm biến mà bạn đang sử dụng hiệu quả nhất có thể. Sửa cho tôi nếu tôi sai, cảm ơn Đã trả lời ngày 28 tháng 11 năm 2012 lúc 2:14Nov 28, 2012 at 2:14
Anggie Azizanggie AzizAnggie Aziz 1331 Huy hiệu vàng1 Huy hiệu bạc10 Huy hiệu đồng1 gold badge1 silver badge10 bronze badges 1 Tôi đã tạo một bài kiểm tra hiệu suất mới cho 3 và 8, bởi vì như đã đề cập trong các bình luận, ở đây đã viết có lỗi (tái tạo các yếu tố). Tôi đã sử dụng mảng, như bạn thấy nó không quan trọng bây giờ. 7Nhưng tôi chỉ có thể kiểm tra nó trên máy chủ Php 5.5.9, ở đây là kết quả: - đã mất 4.4571571350098 giây - đã mất 4.4425978660583 giây Tôi thích 3 vì lý do dễ đọc.Đã trả lời ngày 9 tháng 6 năm 2015 lúc 17:28Jun 9, 2015 at 17:28
Michael B.Michael B.Michael B. 7668 Huy hiệu bạc14 Huy hiệu đồng8 silver badges14 bronze badges 3 Mã nếu không giải phóng bộ nhớ ngay lập tức vẫn rất hữu ích và sẽ là một thông lệ tốt để thực hiện điều này mỗi khi chúng tôi chuyển các bước mã trước khi chúng tôi thoát khỏi một phương thức. Hãy lưu ý rằng nó không phải là giải phóng bộ nhớ ngay lập tức. Bộ nhớ ngay lập tức dành cho CPU, những gì về bộ nhớ phụ là RAM.Và điều này cũng giải quyết về việc ngăn chặn rò rỉ bộ nhớ. Vui lòng xem liên kết này http://www.hackingwithphp.com/18/1/11/be-wary-of- garbage-collection-part-2 Tôi đã sử dụng unset trong một thời gian dài bây giờ. Thực hành tốt hơn như thế này trong mã để hủy bỏ tất cả các biến đã được sử dụng làm mảng. 8và 1 để giải phóng tất cả các cách sử dụng biến.Vui lòng xem chủ đề liên quan đến UndT Làm thế nào quan trọng đối với các biến số trong PHP? [bug]
Đã trả lời ngày 29 tháng 10 năm 2015 lúc 19:53Oct 29, 2015 at 19:53
zero8zero8zero8 1.8993 huy hiệu vàng14 Huy hiệu bạc25 Huy hiệu đồng3 gold badges14 silver badges25 bronze badges PHP không được đặt bộ nhớ miễn phí?unset () thực hiện đúng những gì tên của nó nói - không đặt một biến. Nó không buộc giải phóng bộ nhớ ngay lập tức. Người thu gom rác của PHP sẽ làm điều đó khi thấy phù hợp - theo ý định sớm, vì những chu kỳ CPU đó không cần thiết, hoặc muộn như trước khi tập lệnh sẽ hết bộ nhớ, bất cứ điều gì xảy ra trước.It does not force immediate memory freeing. PHP's garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren't needed anyway, or as late as before the script would run out of memory, whatever occurs first.
Làm thế nào tôi có thể giới hạn bộ nhớ PHP của mình?'Memory_Limit' là lượng bộ nhớ máy chủ tối đa mà một tập lệnh PHP duy nhất được phép sử dụng.Giá trị cần được chuyển đổi trước khi so sánh ngưỡng của bộ nhớ.Ví dụ: 64m được chuyển đổi thành 64 * 1024 * 1024. Sau đó, việc so sánh được thực hiện và kết quả được in ra.The value needs to be converted before comparing the threshold of memory. For example − 64M is converted to 64 * 1024 * 1024. After this, the comparison is done and the result is printed out.
Điều gì tốt hơn trong việc giải phóng bộ nhớ bằng php unset () hoặc $ var null?Kết luận: NULL sẽ tốt hơn nếu bộ nhớ cần ít hơn cho một biến.NULL is better if the memory needed is less for a variable.
Php quản lý bộ nhớ như thế nào?Các chức năng quản lý bộ nhớ PHP được trình điều khiển gốc MySQL gọi thông qua trình bao bọc nhẹ.Trong số những người khác, trình bao bọc làm cho việc gỡ lỗi dễ dàng hơn.Máy chủ MySQL khác nhau và các API máy khách khác nhau phân biệt giữa các bộ kết quả được đệm và không có nội dung.invoked by the MySQL Native Driver through a lightweight wrapper. Among others, the wrapper makes debugging easier. The various MySQL Server and the various client APIs differentiate between buffered and unbuffered result sets. |