循环通过所有开机自检内存错误

时间:2012-11-06 作者:frnhr

我有几千篇帖子,需要在管理中列出所有帖子。当我使用WP\\u Query一次获取它们时,我得到了一个内存错误。然后,我将其拆分为几个查询调用,在256 MB的限制下运行良好。代码如下:

$limit = 200;
$offset = 0;
while (TRUE) {
    $posts = new WP_Query(array(
            \'posts_per_page\'        => $limit,
            \'offset\'                => $offset,
            \'post_type\'     =>  $post_type,
            \'orderby\'       =>  \'title\',
            \'order\'         =>  \'ASC\',
            \'post_status\' => array(\'publish\', \'private\', \'draft\', \'inherit\'),
    ));

    if (!$posts->have_posts()) break;

    while($posts->have_posts())
    {
            $posts->the_post();

            # do some echoing with the $post
    }

    $offset += $limit;
} /*(TRUE)*/
所以这在开发服务器上运行得很好。但当转移到生产环境时,它会引发内存错误Allowed memory size of 268435456 bytes exhausted (tried to allocate 64 bytes) ...

我试着降低$limit 但它没有帮助(在dev上,它实际上可以很好地使用$limit = 500.

我还能做些什么来强制它释放内存?

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

这些帖子仍然保存在WordPress缓存机制下的内存中(即使您替换了$posts 在每个循环上)-操作后删除每个循环:

# do some echoing with the $post

# wipe post from memory
wp_cache_delete( $post->ID, \'posts\' );
wp_cache_delete( $post->ID, \'post_meta\' );
Pro提示:使用保存一些不必要的查询no_found_rows => true 在查询参数中。

如果循环中没有使用类别/标记,请使用update_post_term_cache => false 在查询参数中。

SO网友:galapogos01

虽然上述方法确实在一定程度上减少了内存使用量,但在大型循环(>2500篇文章)中,您仍然会看到每个循环的内存使用量都在增加。

以下操作将刷新所有Wordpress缓存,使内存使用量尽可能小:

wp_cache_flush();

结束

相关推荐

trouble with my loop

我正在尝试从我的博客页面中排除类别。我已经把代码都设置好了,根据法典,这应该行得通 $string = \'-\' . implode( \',-\', explode( \' \', $data[\'exclude_categories\'] ) ); 测试时,上述行会将其打印到屏幕上-主页-最新新闻这是我试图从博客页面中删除的两个测试类别。然后我像这样开始我的查询 <?php query_posts($query_string . \'&cat=\' . $string);?