【问题标题】:Doctrine2 ODM Free MemoryDoctrine2 ODM 空闲内存
【发布时间】:2012-06-28 13:27:15
【问题描述】:

我尝试在 MongoDB 中浏览 15 000 个文档。 php 使用内存随着 Doctrine ODM 爆炸式增长。 我制作了一个顺序脚本,但内存仍在增长。

$nbrNoticesTotal = $noticesNbr['count'];
        $page = 0;
        $limit = 500;
        $pt = 0;
        $ptTotal = 0;
        $notices = $dm->getRepository('Notice')->findLimit($page, $limit)->toArray();
        if ($nbrNoticesTotal > 0) {
            while ($ptTotal < $nbrNoticesTotal) {
                if ($pt >= $limit) {
                    unset($notices);
                    $this->getContainer()->get('doctrine.odm.mongodb.document_manager');
                    $page += $limit;
                    $notices = $dm->getRepository('Notice')->findLimit($page, $limit)->toArray();
                    $pt = 0;
                }
                foreach ($notices as $key => $notice) {

                    $pt++;
                    $ptTotal++;
                    //unset($notice);
                    unset($notices[$key]);
                }
            }
        }

memory_get_usage() 示例:

2012-06-28 14:53:08.541-defaultLogger-DEBUG Start : 20,339,624
2012-06-28 14:53:10.154-defaultLogger-DEBUG get package : 1 - 64,207,344
2012-06-28 14:53:10.891-defaultLogger-DEBUG pointer time : 64,250,536
2012-06-28 14:53:11.642-defaultLogger-DEBUG pointer time : 64,246,952
2012-06-28 14:53:12.375-defaultLogger-DEBUG pointer time : 64,243,368
2012-06-28 14:53:13.140-defaultLogger-DEBUG pointer time : 64,239,784
2012-06-28 14:53:13.911-defaultLogger-DEBUG pointer time : 64,236,264
2012-06-28 14:53:15.359-defaultLogger-DEBUG get package : 2 - 104,447,576
2012-06-28 14:53:17.259-defaultLogger-DEBUG pointer time : 104,482,168
2012-06-28 14:53:19.013-defaultLogger-DEBUG pointer time : 104,478,584
2012-06-28 14:53:20.771-defaultLogger-DEBUG pointer time : 104,475,000
2012-06-28 14:53:22.650-defaultLogger-DEBUG pointer time : 104,471,416
2012-06-28 14:53:24.575-defaultLogger-DEBUG pointer time : 104,467,840
2012-06-28 14:53:26.081-defaultLogger-DEBUG get package : 3 - 139,016,152
2012-06-28 14:53:29.192-defaultLogger-DEBUG pointer time : 139,046,936
2012-06-28 14:53:32.560-defaultLogger-DEBUG pointer time : 139,043,360
2012-06-28 14:53:35.456-defaultLogger-DEBUG pointer time : 139,039,912
2012-06-28 14:53:38.229-defaultLogger-DEBUG pointer time : 139,036,336

我该怎么做才能清除内存? (取消设置不起作用)

【问题讨论】:

    标签: mongodb memory symfony doctrine-orm


    【解决方案1】:

    尝试使用 EntityManager::clear 方法告诉 DC 清除对象。

    据我所知,foreach 会复制数组并在 foreach 循环中取消设置以从数组中取消设置元素不起作用 - 我的意思是内存使用情况,请尝试使用 for 而不是 foreach。

    还可以尝试使用 $value = null; 而不是 unset,因为 unset 只是告诉 PHP 的 GC 它可以从内存中删除它 - 但你不知道他什么时候会这样做。有一些关于 unset & null 的话题——我现在可能是错的。

    希望对你有所帮助。

    还有其他地方可以增加内存。

    【讨论】:

    • 完美。我使用 DocumentManager::clear 和 $value=null;谢谢
    • 如果有帮助,请编辑问题并为其他人发布差异:)
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2014-12-15
    • 2012-09-18
    • 2016-12-24
    • 2011-07-13
    • 2015-08-17
    相关资源
    最近更新 更多