Почему Doctine PHP свободен () не работа?

extends AsyncTask<String,Void,String>

Здесь String означает, что AsynkTask ожидает тип String в Return.

protected String doInBackground(String...url) {
    return Update(url[0]);
}

Уже в отдельной теме. Просто удалите его из метода.

пс. Не используйте AsynkTask для соединений с сервером. (это нестабильная вещь с жизненным циклом Activity)

5
задан Vadim Kotov 17 August 2017 в 14:26
поделиться

5 ответов

Проблема, это free() не удаляет объекты Доктрины из памяти, но просто устраняет циклические ссылки на тех объектах, позволяющих сборщику "мусора" к очистке те объекты. См. 23.6 Свободных Объекта в руководстве Доктрины:

С версии 5.2.5 PHP не может собрать "мусор" графы объектов, которые имеют циклические ссылки, например, Родитель имеет ссылку на Ребенка, который имеет ссылку на Родителя. Так как много объектов модели доктрины имеют такие отношения, PHP не освободит их память, даже когда объекты выходят из объема.

Для большинства приложений PHP не есть большого значения эта проблема, так как Сценарии PHP имеют тенденцию быть недолгими. Дольше жившие сценарии, например, объемные средства импорта данных и средства экспорта, могут исчерпать память, если Вы вручную не повреждаете цепочки циклической ссылки. Доктрина обеспечивает свободное () функция на Doctrine_Record, Doctrine_Collection и Doctrine_Query, который устраняет циклические ссылки на тех объектах, освобождая их для сборки "мусора".

Решение должно быть к unset() $query объект после использования free():

$query = Doctrine_Query::create()
            ->from('SubmissionQueue s')
            ->where('s.time_acted_on IS NULL')
            ->orderby('s.time_queued')
            ->limit(1);
$query->execute();
print $query[0]->time_queued . "\n";
$query->free();
unset($query); // perhaps $query = null; will also work
6
ответ дан 14 December 2019 в 09:03
поделиться

Doctrine_Query также имеет свободное () метод, в данный момент Вы просто называете свободными () на Вашем Doctrine_Collection, например, пробуете:

 $query = Doctrine_Query::create()
             ->from('SubmissionQueue s')
             ->where('s.time_acted_on IS NULL')
             ->orderby('s.time_queued')
             ->limit(1);
 $results = $query->execute();
 print $results[0]->time_queued . "\n";

 $results->free();
 $query->free();
1
ответ дан 14 December 2019 в 09:03
поделиться

Попробуйте $query-> свободный (верный);

(?)

0
ответ дан 14 December 2019 в 09:03
поделиться

Я думаю, что мог бы, просто собравшись использовать PDO для частей бэкенда, которым действительно не нужен ORM так или иначе, так как нет то, что много запросов. Я просто действительно хотел иметь единственный способ взаимодействовать с DB через все мои приложения в этой системе. Возможно, я уделю еще некоторое внимание.

0
ответ дан 14 December 2019 в 09:03
поделиться

Никакой опыт с Доктриной (просто некоторый интерес, поскольку я обнаружил его в эти выходные...), поэтому не возьмите или оставьте мое предположение... ^_^

Я попытался бы разделить создание запросов от выполнять часть:

$query = Doctrine_Query::create()
            ->from('SubmissionQueue s')
            ->where('s.time_acted_on IS NULL')
            ->orderby('s.time_queued')
            ->limit(1);
$query->execute();
print $query[0]->time_queued . "\n";
$query->free();

Не уверенный, что выполняет возвраты, но на всякий случай, это стоит попробовать... Если у кого-то нет более просвещенного совета!:-P

0
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: