gpt4 book ai didi

php - Doctrine 查询内存使用情况

转载 作者:可可西里 更新时间:2023-10-31 22:41:28 24 4
gpt4 key购买 nike

Doctrine 似乎占用了超过 4MB 的 RAM 来执行一个简单的查询:

print memory_get_peak_usage()." <br>\n";
$q = Doctrine_Query::create()
->from('Directories d')
->where('d.DIRECTORY_ID = ?', 5);

$dir = $q->fetchOne();
print $dir['name']." ".$dir['description']."<br>\n";

print memory_get_peak_usage()." <br>\n";

/*************** OUTPUT: **************************

6393616
testname testdescription
10999648

/***************************************************/

这是一个测试数据库,其中的数据非常少 - 我正在查询的项目不包含此处显示的数据以外的任何数据。

我设置系统的方式是否存在潜在问题,或者这是 Doctrine 的标准内存使用情况?

最佳答案

据我所见,你的代码似乎没有错...


作为测试,我设置了一个简单的示例,其中包含一个非常简单的表(只有四个字段)

相关代码如下:

var_dump(number_format(memory_get_peak_usage()));

$test = Doctrine::getTable('Test')->find(1);

var_dump(number_format(memory_get_peak_usage()));

这样做时,我有这种输出:

string '1,316,088' (length=9)
string '2,148,760' (length=9)

考虑到该表非常简单,而且我只获取一行,对我来说它似乎也“很多”——但这与您得到的以及我在其他项目中看到的非常一致:-(


如果您只需要显示您的数据,而不是使用它(即更新/删除/...),一个解决方案可能是不获取复杂的对象,而只获取一个简单的数组:

$test = Doctrine::getTable('Test')->find(1, Doctrine::HYDRATE_ARRAY);

但是,在这种情况下,实际上并没有太大区别 :-( :

string '1,316,424' (length=9)
string '2,107,128' (length=9)

只有 40 KB 的差异——好吧,对于更大的对象/更多的行,它可能仍然是个好主意……


在 Doctrine 手册中,有一个名为 Improving Performance 的页面;也许它可以帮助你,特别是对于这些部分:


哦,顺便说一句:我在 PHP 5.3.0 上做了这个测试;也许这会对使用的内存量产生影响......

关于php - Doctrine 查询内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1412762/

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