在我的symfony應用程序中,我正在生成一個表單以便參數某些成分。 我現在面臨用戶開始管理數千種配料的情況。symfony:表單代需要大量內存
只有200種成分,php的內存使用量超過了最高120Mo。
以下顯示使用50Mo和創建表單的操作統計數據需要40Mo。如果我嘗試渲染視圖,它會崩潰。
我該怎麼做才能避免表單花費太多內存?
我的控制器動作:
/**
* @Route("/set_ingredient_stock", name="set_ingredient_stock")
* @Method({"PUT","GET"})
* @Template(":FoodAnalytics/UserIngredient:set_ingredient_stock.html.twig")
* @param Request $request
* @Security("is_granted('organizer')")
* @return array|\Symfony\Component\HttpFoundation\RedirectResponse
*/
public function setIngredientStockAction(Request $request)
{
r('init : ' . ceil(memory_get_usage()/1000000));
$userIngredientManager = $this->get('user_ingredient_manager');
r('manager : ' . ceil(memory_get_usage()/1000000));
/** @var User $user */
$user = $this->getDoctrine()->getRepository('AppBundle:User\User')->findUserWithUserIngredients($this->getPortfolioUser());
r('user : ' . ceil(memory_get_usage()/1000000));
$setStockIngredientForm = $userIngredientManager->getSetIngredientStockForm($user);
r('form : ' . ceil(memory_get_usage()/1000000));
if ($request->getMethod()=='PUT')
{
$formManager = $this->get('form_manager');
if ($formManager->handleRequestAndFlush($setStockIngredientForm, $user))
{
$this->addSuccess("Le stock d'ingrédients à été mis à jour");
return $this->redirectToRoute('set_ingredient_stock');
}
$this->addInvalidFormMessage();
}
$nonExecutedTasks = $this->getDoctrine()->getRepository('AppBundle:FoodAnalytics\Task')->getNonExecutedTasksQueryBuilder($this->getPortfolioUser())->select('COUNT(t)')->getQuery()->getSingleScalarResult();
$nonReceivedOrders = $this->getDoctrine()->getRepository('AppBundle:MarketPlace\Order')->getNonReceivedOrdersQueryBuilder($this->getPortfolioUser())->select('COUNT(o)')->getQuery()->getSingleScalarResult();;
$horizon = $user->getParameter(User::STOCK_HORIZON) ?: 7;
r('small_variables : ' . ceil(memory_get_usage()/1000000));
$userIngredients = $this->getDoctrine()->getRepository('AppBundle:FoodAnalytics\UserIngredient')->getUserIngredientsWithJoinsIndexedByProductIds($this->getPortfolioUser());
r('user_ingredients : ' . ceil(memory_get_usage()/1000000));
$stocks = $userIngredientManager->getUserIngredientStocks($userIngredients, $horizon);
~r('stocks : ' . ceil(memory_get_usage()/1000000));
return array(
'set_stock_ingredient_form' => $setStockIngredientForm->createView(),
'non_executed_tasks' => $nonExecutedTasks,
'non_received_orders' => $nonReceivedOrders,
'stocks' => $stocks,
'horizon' => $horizon
);
}
轉儲:
init : 50
manager : 51
user : 61
form : 100
small_variables : 100
user_ingredients : 101
stocks : 105
編輯: 生成形式方法剛剛創建連接到誰擁有userIngredients集合用戶經常symfony的形式由另一種類型生成。每個用戶的成分有3個字段。
蹊蹺的整個應用程序,就開始你有50MB?整個要求我從未超過20MB。剛剛檢查了一個控制器,註釋類似於你的,初始狀態下我有5個,在清除緩存之後,它首次訪問時增加到9。 – malcolm
arf,解決這個問題可能會加快我的應用程序的速度!任何想法 ? –
xdebug或任何其他工具來分析您的應用程序。 – malcolm