gpt4 book ai didi

php - CodeIgniter DataMapper ORM 内存问题

转载 作者:行者123 更新时间:2023-11-29 12:54:23 24 4
gpt4 key购买 nike

我正在使用 CodeIgniter 和 DataMapper 来管理电子商务商店的关系。关系是:

一个产品有多个sku一个产品有多个 amazon_products一个 sku 有很多 amazon_products

我正在尝试从数据库中检索所有数据并将其格式化以供前端的 Backbone 使用。我最终想以以下格式将json发送到页面:

Array of products
Product
Array of amazon_products
Array of skus
Array of amazon_products
Product
Array of amazon_products
Array of skus
Array of amazon_products
Product
Array of amazon_products
Array of skus
Array of amazon_products

目前,我使用以下 PHP 代码生成此数据:

$products = new Product();
$products->order_by('ext_created_on', 'desc')->get();

$data['products'] = array();

foreach($products as $product){
$product_array = $product->to_array();
$product_array['amazon'] = $product->amazon_product->get()->all_to_array();
foreach($product->sku->get() as $sku){
$sku_array = $sku->to_array();
$sku_array['amazon'] = $sku->amazon_product->get()->all_to_array();
$product_array['skus'][] = $sku_array;
}
$data['products'][] = $product_array;

echo memory_get_usage()."<br>"
}

$data['products'] = json_encode($data['products']);

当我在执行此命令时监视 Ubuntu 服务器的内存时,它似乎使用了大量内存(约 13% 的内存)。此外,由于数据库中有大约 700 个产品,DataMapper 正在运行 1000 个查询来获取所有这些数据。查询是否导致内存使用率过高?或者我在 foreach 循环中是否忽略了一些可能导致内存泄漏的内容?

第一个乘积循环后 get_memory_usage() 的输出为 33678176,最后一个乘积循环后的输出为 109580968。

最佳答案

如果有人遇到这个问题,我可以通过使用 DataMapper 的 clear() 方法将内存使用量减少到大约 1/3。我只是在外部 foreach 循环的末尾添加了行 $product->clear()

我还在内部循环的末尾添加了一个 $sku->clear()

关于php - CodeIgniter DataMapper ORM 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com