【问题标题】:nullifying codeigniter objects or php in general?一般来说,取消codeigniter对象或php?
【发布时间】:2012-09-03 22:39:04
【问题描述】:

我正在使用 codeigniter 和 PHP 来构建一个 Web 应用程序,由于我必须执行大量查询,我必须在模型内部定义/使用很多对象。 有时我必须在循环中多次使用同一个对象,例如:

  $dbData = $this->mydb->query($dbQuery);
  if($dbData->num_rows() >0 ){ //check if rows were returned
     $dbResult = $dbData->result();
     foreach( $dbResult as $index => $row){
        $dbArray[$row->JOB_NAME_STG] = $row->REC_LOADED;
    }

在一般的编程实践中,一旦不再需要对象,您就应该将其无效,但我无法找到确保所有对象无效的最佳方法的任何详细信息,从而避免 codeigniter 或 php 一般的内存泄漏.

在函数末尾给对象赋值 NULL 就足够了吗?

$dbData = $this->mydb->query($dbQuery);
$dbData = NULL;

或者 codeigniter 有更有效的方法来确保没有内存泄漏。

在使用之前是否应该在循环内将对象无效以确保没有内存泄漏?

任何方向的指针将不胜感激。 谢谢!!!

【问题讨论】:

  • “在一般的编程实践中,一旦不再需要对象,你就应该取消它们”——谁告诉你的?这不是真的。
  • 我从未取消任何对象。我认为我们不应该这样做
  • 我认为你不应该取消指向对象的指针......你应该取消它们。如果您使指针无效,那么指针现在指向值 NULL 并失去对原始内存的引用......从而迫使垃圾收集对其进行排序!至少,您可以按以下顺序执行:unset( $dbData ); $dbData = NULL;

标签: php codeigniter memory-management memory-leaks codeigniter-2


【解决方案1】:

分配null 没有意义:

  1. php >= 5.3
  2. 几个小时都不能工作的应用程序

以上两项都符合吗?

【讨论】:

  • 我使用的是 php 版本 5.3.10,我的脚本运行了 10-20 分钟.. 不是几个小时
  • @user1017268:所以 - 这没有意义
  • 你能告诉我一些关于为什么 NULL 在 php >= 5.3 中不需要的细节吗??
  • @user1017268:在 php 5.3 中引入了新的智能垃圾收集器
【解决方案2】:

unset() 应该从内存中释放变量或对象。但是,PHP 没有很好的垃圾收集功能。他们正在尝试使用 5.3 的新循环垃圾收集来改进它,但仍然存在挑战。

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 2012-02-22
    • 2013-12-26
    • 2012-12-23
    • 1970-01-01
    • 2016-01-28
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多