作者nono5938 (玥乂)
看板PHP
標題[請益] laravel 資料庫 要釋放res嗎?
時間Fri May 5 22:00:10 2017
我google了一下,
別人程式碼都沒有
free() 或是 close()之類的,
是不用釋放資源?
還是他自己會釋放啊,
怕會佔用我的資源。
-----
Sent from JPTT on my Xiaomi MI 5.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.168.131
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PHP/M.1493992812.A.598.html
1F:推 hiigara: 是否寫習慣C...PHP引擎自己會做記憶體管理,你碰不到 05/06 10:27
2F:→ hiigara: 一般來說Resource Handler在用不到以後會自動被PHP收拾掉05/06 10:30
3F:→ hiigara: 不過DB連線是例外,因為有Persistent Connections 05/06 10:31
我就是想問,
用laravel的function去執行DB指令,
也沒看過有人在釋放這個資源的啊OAO
不過我想我知道差別在哪了,
用laravel的function輸出會直接成為一個array,
php指令輸出會以其他方式存在,
大概吧。。。。
※ 編輯: nono5938 (119.14.168.131), 05/07/2017 02:08:27
※ 編輯: nono5938 (119.14.168.131), 05/07/2017 02:11:30
5F:推 hiigara: 「用不到」指的是沒有其他東西指到這個變數,這邊跟PHP的 05/07 09:52
6F:→ hiigara: 垃圾回收機制綁在一起。一旦PHP認為這個變數可以被GC,就 05/07 09:53
7F:→ hiigara: 會自動把下面的資源放掉,記憶體釋放出來。 05/07 09:53
8F:→ hiigara: 所以官方文件「關閉PDO的DB連線」的方式是把pdo設為null 05/07 09:55
10F:→ hiigara: 實務上「判斷東西沒在用」這件事還滿麻煩的...以上面文件 05/07 09:57
11F:→ hiigara: 的例子來說,如果$sth沒有設為null,還是會因為$sth裡面 05/07 09:58
12F:→ hiigara: 有用到$dbh而無法把$dbh回收掉 05/07 09:58
13F:→ hiigara: 不過最少在這隻PHP跑完後,PHP還是會自動回收掉外部資源 05/07 10:00
14F:→ hiigara: 除~非~那是個persistence connection,那就會被留著 05/07 10:01
15F:→ hiigara: 讓下一個用到的PHP程式使用 05/07 10:01
wow 謝謝你這麼詳細的回答
※ 編輯: nono5938 (39.10.202.139), 05/07/2017 16:00:56
16F:→ banqhsia: 沒在管 +1 05/11 01:04
17F:→ blo6: php是直譯語言,是優點也是缺點。優點是你不用深入管理記憶 05/15 02:10
18F:→ blo6: 體,缺點是當效能極限時很難再提升。這也是facebook把php改 05/15 02:10
19F:→ blo6: 成組譯的原因 05/15 02:10
20F:推 GALINE: PHP 應該沒有 assembler..HHVM 靠 JIT,目前 PHP7.1 沒有 05/15 16:47
21F:→ GALINE: JIT 就快要跟 HHVM 平起平坐,真的引入 JIT 的話應該更快 05/15 16:48
22F:→ GALINE: 沒有辦法操控底層資料結構是硬傷,但是這點對於九成九九的 05/15 16:49
23F:→ GALINE: PHP 應用都不是問題,DB 以及網路傳輸沒那麼快 05/15 16:49
24F:→ GALINE: 更何況 Python 那麼慢大家都用得這麼開心了(酸 05/15 16:50
25F:→ MOONRAKER: php是沒有asm 不過他底層一樣有opcode這些設計 05/20 18:40
26F:→ MOONRAKER: 而且不是fb改的 05/20 18:40
27F:推 ej04cj86: Php 有自己的garbage collector,在一個request cycle 06/01 07:00
28F:→ ej04cj86: 結束後就會被collect and dump 06/01 07:00