web*_*.pl 0 php io performance
我正在查询数据库,然后使用file_put_contents()将返回的数据存储到XML文件中.我想知道调用这个函数的方法更好.请注意,$ data是大数组,变量$ rss在这种情况下可以包含一个大字符串.
起初我实现了这样的事情:
foreach($data as $item)
{
$rss .= '<title>'.getTitle($item['id']).'</title>';
$rss .= '<data>'.getData($item['id']).'</data>.';
file_put_contents($this->fileRss, $rss);
unset($rss);
}
Run Code Online (Sandbox Code Playgroud)
然后我改为:
foreach($data as $item)
{
$rss .= '<title>'.getTitle($item['id']).'</title>';
$rss .= '<data>'.getData($item['id']).'</data>.';
}
file_put_contents($this->fileRss, $rss);
Run Code Online (Sandbox Code Playgroud)
哪种方式更好?制作一个大的,大的变量$ rss,然后保存它或每次保存很小的变量?我不确定,但我认为IO操作比内存操作慢,所以第一种方式更好.唯一的问题可能是内存限制.
第一个示例不正确,除非您将fILE_APPEND添加到file_put_contents.
file_put_contents($this->fileRss, $rss, FILE_APPEND);
Run Code Online (Sandbox Code Playgroud)
我宁愿在循环之前手动打开文件,在循环中写入每个rss数据块,并在循环之后关闭文件.
$file = fopen($this->fileRss, 'w');
foreach($data as $item)
{
$rss = '';
$rss .= '<title>'.getTitle($item['id']).'</title>';
$rss .= '<data>'.getData($item['id']).'</data>.';
fwrite($file, $rss);
}
fclose($file);
Run Code Online (Sandbox Code Playgroud)
这样您就不会将所有rss条目存储在内存中,并且避免在每次迭代中打开和关闭文件.我也替换了unsetwith $rss = '';以避免循环内的垃圾收集.
| 归档时间: |
|
| 查看次数: |
2254 次 |
| 最近记录: |