我已经为此纠结了两天多了。我需要你的帮助。
我有一个从1到5000的简单循环来插入wordpress术语。似乎wp_insert_term以某种方式泄漏了内存,脚本变慢了。
考虑下面的脚本(如果你要运行它,你需要把它放在根wordpress目录下):
<?php
$full_start = microtime(true);
include_once 'wp-load.php';
for($i=1;$i<5000;$i++) {
$sub_start = microtime(true);
wp_insert_term('Some Genre Name '.$i, 'genres', array('description' => "Description"));
echo "AT: ".$i." Mem: ".memory_get_usage();
$sub_end = microtime(true);
echo " In: ".($sub_end - $sub_start)." seconds Golabls: ".count($GLOBALS)."\n";
}
$full_end = microtime(true);
echo "Total time: ".($full_end - $full_start)." seconds\n";你会注意到,随着词条的增加,脚本的插入速度会变慢,插入的时间会更长。此外,内存使用量以天文数字的速度增长。我想知道可以做些什么来防止内存泄漏,以及速度减慢的原因是否是内存使用。我确实调试了wp查询,但它们似乎不是导致速度减慢的原因。
任何帮助都将不胜感激。我尝试用xhprof分析它,但没有成功。
发布于 2015-04-16 22:08:54
这可能已经很长时间了,也许你现在已经弄明白了,但我最近遇到了这个问题,所以事情是这样的:
在执行路径的某个时刻,wp_insert_posts()执行对get_terms()的调用,检索您正在处理的分类的所有术语ID。这些in也被缓存在WordPress的缓存中。
如果你的分类中有大量(1000秒)的术语(在你的例子中是‘genres’),这会导致高内存使用率(根据PHP和WordPress的相关限制,甚至可能是由于内存耗尽而导致的致命错误),那么缓存的大小就会急剧增加。
您可以通过调用wp_cache_flush()来清除缓存。
例如,您可以在循环中的某个位置包含以下内容:
if ( $i % 500 == 0 ) {
wp_cache_flush();
}https://stackoverflow.com/questions/25083509
复制相似问题