gpt4 book ai didi

php - 从 PHP 中的文件处理程序释放内存

转载 作者:行者123 更新时间:2023-12-05 07:55:59 24 4
gpt4 key购买 nike

最近我开始面对 PHP 内存管理方面的问题。这对我来说是新事物,因为我从来不需要在后台线程上长时间运行 PHP 脚本。所以,现在我正在研究这个主题并得出以下简单脚本:

function w()
{
$f = fopen('test1.txt', 'w+');
fclose($f);
unset($f);
}

$i = 0;
$max = 5;

echo 'Memory usage:<br><br>';
echo $i . ' - ' . memory_get_usage() . '<br>';
touch('test1.txt');

while(++$i < $max)
{
w();
echo $i . ' - ' . memory_get_usage() . '<br>';
}

它只会多次打开和关闭同一个文件,每次关闭后它会显示使用的内存。

如您所见,即使在关闭并取消设置()处理程序之后,内存也不会减少。似乎指针在内部仍保留着内存。我知道,它们只有几个字节,但如果脚本在后台线程上运行(这是我的真正目的),即使是几个字节也会破坏脚本。

我尝试设置 $f = null 但它会消耗更多内存(我没疯,自己检查一下)! gc_collect_cycles() 也没有工作。

所以我的问题是:有没有办法完全释放文件处理程序的内存?

最佳答案

您可以派生一个子进程并让子进程打开文件。

这样,当子进程结束时,其所有资源将被 PHP 垃圾收集进程清除。

但是请记住,子级将可以访问父级创建的任何资源,并且在他完成后也将关闭这些资源。

更新的帖子:

实际上,在通过命令行尝试您的脚本后(我只是将其修改为迭代 100 次而不是 5 次),这是我得到的:

Memory usage:
0 - 119384
1 - 119564
2 - 119564
3 - 119564
4 - 119564
5 - 119564
6 - 119564
7 - 119564
8 - 119564
9 - 119564
10 - 119564
11 - 119564
12 - 119564
13 - 119564
14 - 119564
15 - 119564
16 - 119564
17 - 119564
18 - 119564
19 - 119564
20 - 119564
21 - 119564
22 - 119564
23 - 119564
24 - 119564
25 - 119564
26 - 119564
27 - 119564
28 - 119564
29 - 119564
30 - 119564
31 - 119564
32 - 119564
33 - 119564
34 - 119564
35 - 119564
36 - 119564
37 - 119564
38 - 119564
39 - 119564
40 - 119564
41 - 119564
42 - 119564
43 - 119564
44 - 119564
45 - 119564
46 - 119564
47 - 119564
48 - 119564
49 - 119564
50 - 119564
51 - 119564
52 - 119564
53 - 119564
54 - 119564
55 - 119564
56 - 119564
57 - 119564
58 - 119564
59 - 119564
60 - 119564
61 - 119564
62 - 119564
63 - 119564
64 - 119564
65 - 119564
66 - 119564
67 - 119564
68 - 119564
69 - 119564
70 - 119564
71 - 119564
72 - 119564
73 - 119564
74 - 119564
75 - 119564
76 - 119564
77 - 119564
78 - 119564
79 - 119564
80 - 119564
81 - 119564
82 - 119564
83 - 119564
84 - 119564
85 - 119564
86 - 119564
87 - 119564
88 - 119564
89 - 119564
90 - 119564
91 - 119564
92 - 119564
93 - 119564
94 - 119564
95 - 119564
96 - 119564
97 - 119564
98 - 119564
99 - 119564

关于php - 从 PHP 中的文件处理程序释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28976984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com