小编U00*_*001的帖子

在PHP中,当我们使用mysql_query时,内存中会发生什么

我曾经使用mysql_query获取大量数据,然后逐个遍历结果来处理数据.例如:

$mysql_result = mysql_query("select * from user");
while($row = mysql_fetch_array($mysql_result)){
    echo $row['email'] . "\n";
}
Run Code Online (Sandbox Code Playgroud)

最近我查看了一些框架并意识到他们将所有数据提取到内存中的数组并返回数组.

$large_array = $db->fetchAll("select * from user");
foreach($large_array as $user){
    echo $user['email'] . "\n";
}
Run Code Online (Sandbox Code Playgroud)

我想知道每种方法的优缺点.在我看来,如果你有一个很长的项目列表,将所有内容加载到内存中会导致灾难.但话说回来,一位同事告诉我,无论如何,mysql驱动程序必须将结果集放入内存中.我想得到一个明白问题是关于绩效的人的意见.请不要对代码发表评论,我只是把它作为帖子的一个例子.

谢谢

php mysql memory heap pointers

12
推荐指数
1
解决办法
895
查看次数

如何在Ubuntu 12.04上读取崩溃文件?

php5-fpm在我们身上崩溃,我们希望获得有关当时正在执行的内容的信息.我们无法从xdebug那里得到它,因为它正在生产中发生.

我将失败实例的驱动器安装到另一个(/ mnt)并尝试读取崩溃文件:

版本信息

root@dev:/mnt/var/crash# cat /mnt/etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"
Run Code Online (Sandbox Code Playgroud)

试图用gdb打开崩溃文件..但是无法识别:

root@dev:/mnt/var/crash# gdb /mnt/usr/sbin/php5-fpm _usr_sbin_php5-fpm.1002.crash 
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please …
Run Code Online (Sandbox Code Playgroud)

php crash gdb coredump ubuntu-12.04

9
推荐指数
1
解决办法
8180
查看次数

如何在vim中保留命令输出窗口

我正在寻找的是与当前包含命令输出到同一缓冲区的窗口不同的窗口.所以我可以执行:

:!php %
Run Code Online (Sandbox Code Playgroud)

并在底部拆分窗口中查看输出.这在我使用过的大多数图形编辑器中都很常见.

笔记:

  1. 不是当前的窗口.不想切换回来
  2. 每次都不创建新的缓冲区.(必须重用"输出"缓冲区)
  3. 我不希望在寄存器中,我希望能够立即看到输出.

流程将是:

  1. 打开vim -S会话......
  2. 编辑文件
  3. 执行一个简单的make-type命令
  4. 查看输出窗口中的命令输出

没有数百个新的缓冲区,不得不在窗口之间切换.

到目前为止我尝试过的并不令人满意......将输出发送到文件,打开自动写入,打开该文件的缓冲区.这有效,但我必须为所有文件打开autoread ..有点烦人.有没有办法为单个缓冲区/文件转为autoread?

谢谢你的帮助.

vim

7
推荐指数
1
解决办法
2131
查看次数

如何在不影响当前窗口的情况下打开Vim中的缓冲区列表

在Vim中,我想加载一个缓冲区列表而不影响当前窗口.

我目前正在加载一个缓冲区列表

:n **/*.php
Run Code Online (Sandbox Code Playgroud)

除了将当前窗口更改为最后加载的文件外,它的工作原理非常好.我正在寻找一个特定的解决方案,缓冲区在后台加载,我当前的窗口不受影响.

不是在追求:

  1. 如何将我之前的窗口恢复如下:

    :b #
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如何创建Vim函数以避免丢失窗口.

  3. 如何创建会话并将其加载回来

    :mksession myproject.vim
    
    # vim -S myproject
    
    Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

php vim

3
推荐指数
1
解决办法
108
查看次数

静态数组是否存储在 opcache 中?

假设我有一个相当大的100k 个元素的关联数组,如下所示:

$resources = array(
'stone'=>'current_stone.gif',
'stick'=>'uglystick.jpg',
...
);
Run Code Online (Sandbox Code Playgroud)

存储在一个名为resources.php的文件中,它在运行时永远不会改变

我想在 Zend opcache 中拥有这些数据,以便在所有进程中共享它(节省内存)并可能加快查找速度。

我目前的假设是,在这种形式下,这个数组不会存储在 opcache 中,因为它没有在任何地方定义为静态结构。

我将如何确保这些数据进入 opcache?

opcache

1
推荐指数
1
解决办法
2150
查看次数

标签 统计

php ×3

vim ×2

coredump ×1

crash ×1

gdb ×1

heap ×1

memory ×1

mysql ×1

opcache ×1

pointers ×1

ubuntu-12.04 ×1