0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 2937 Просмотров
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
 http://pastebin.com/pKHG0RaS
Код: "php"
              $sm=memory_get_usage();
$items=array();
foreach ($app_categories as $cate) {
$app_items = $cate->getItems();
if (count($app_items)) foreach ($app_items as $app_item ) {
$items[]=array("id"=>$app_item->id,"type"=>$app_item->type,"name"=>$app_item->name,
"alias"=>$app_item->alias,"elements"=>null);
};
unset($app_items);
}
unset($app_items);
echo "mem used for ".count($items)." items - ".(memory_get_usage()-$sm);

 mem used for 29 items - 906144
 объясните пожалуйста - как так?
 каждый элемент - просто строка
 mem used for 49 items - 1233788
 for 69 items - 1560448
 
*

Dron79

  • Захожу иногда
  • 321
  • 37 / 0
  • Век живи - век учись!
Re: Куда столько памяти уходит?
« Ответ #1 : 24.01.2013, 17:15:25 »
Ради интереса вставь в код
Код: php
print($app_categories);
foreach ($app_categories as $cate) {
$app_items = $cate->getItems();
        print_r($app_items);
И ты поймешь какими объектами ZOO в памяти работает.
Если категорий много то и память забивается капитально.
Вообще я был удивлен когда разбирался в коде zoo, как дерево категории посмотрел, и понял что никогда не буду использовать ZOO в больших проектах.
Я считаю что это очень не рациональное использование памяти.
кодинг на php.
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Куда столько памяти уходит?
« Ответ #2 : 24.01.2013, 17:48:18 »
Код: php
      print_r($app_items);
Этот участок вообще вываливает апач в out of memory, что на 192, что на 280мб
Я же специально сделал unset и новый массив без тяжелых объектов, потом даже попробовал принудительно давать тип integer\string - всё равно память кушается.
*

Dron79

  • Захожу иногда
  • 321
  • 37 / 0
  • Век живи - век учись!
Re: Куда столько памяти уходит?
« Ответ #3 : 24.01.2013, 18:54:03 »
Для оптимизации приложения лучше переписать модель фронта. Пусть лучше больше мелких запросов к базе будет, чем такие выборки при каждом запросе к странице делать. Это же надо
Код: php
$app_items = $cate->getItems();
выбирает все материалы категории, а если их пару тысяч будет.
кодинг на php.
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Куда столько памяти уходит?
« Ответ #4 : 25.01.2013, 04:12:44 »
Для оптимизации приложения лучше переписать модель фронта. Пусть лучше больше мелких запросов к базе будет, чем такие выборки при каждом запросе к странице делать. Это же надо
Код: php
$app_items = $cate->getItems();
выбирает все материалы категории, а если их пару тысяч будет.
Их будет больше, каждый раз запрашивать в запросе - слишком долго, так как для каждого придется сверять есть ли уже такой (это импорт).
Да и если через мускуль, мы спускаемся на уровень ниже...
*

Dron79

  • Захожу иногда
  • 321
  • 37 / 0
  • Век живи - век учись!
Re: Куда столько памяти уходит?
« Ответ #5 : 25.01.2013, 08:21:44 »
Проще время исполнения скрипта увеличить, чем увеличить оперативную память на сервере.
Поправлюсь так дешевле выдет. Плюс время работы скрипта можно увеличивать до бесконечности и бесплатно. А доп. оперативка за деньги.
Кроме того количество материалов дальше, будет только рости.
кодинг на php.
*

Aponte

  • Захожу иногда
  • 122
  • 3 / 3
Re: Куда столько памяти уходит?
« Ответ #6 : 03.04.2013, 14:56:17 »
Для оптимизации приложения лучше переписать модель фронта. Пусть лучше больше мелких запросов к базе будет, чем такие выборки при каждом запросе к странице делать. Это же надо
Код: php
$app_items = $cate->getItems();
выбирает все материалы категории, а если их пару тысяч будет.

Почему все?
Айтемов берется столько, сколько должно показываться одновременно на странице
*

Dron79

  • Захожу иногда
  • 321
  • 37 / 0
  • Век живи - век учись!
Re: Куда столько памяти уходит?
« Ответ #7 : 15.04.2013, 11:05:54 »
А вы протестируйте для начала.
кодинг на php.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться