Validation 使用symfony表单验证程序进行批量插入

Validation 使用symfony表单验证程序进行批量插入,validation,forms,symfony1,memory-management,bulkinsert,Validation,Forms,Symfony1,Memory Management,Bulkinsert,我从用户处收到一个CSV文件,并希望将其插入数据库。我想使用表单验证: $pf = new ProductForm(); $old_memory_usage = 0; while($data = $csvreader->read()) { $mem = memory_get_usage() / 1024; echo "Memory-Usage: " . $mem . " KB; Mem-Diff: " . $mem - $old_memory_usage . "\n"; $o

我从用户处收到一个CSV文件,并希望将其插入数据库。我想使用表单验证:

$pf = new ProductForm();
$old_memory_usage = 0;

while($data = $csvreader->read())
{
  $mem = memory_get_usage() / 1024;
  echo "Memory-Usage: " . $mem . " KB; Mem-Diff: " . $mem - $old_memory_usage . "\n";
  $old_memory_usage = $mem;

  $p = new Product();
  $p->fromArray($data);
  $pf->bind($p->toArray(), array());
  if($pf->isValid())
  {
    $p->save();
  }
  else
  {
    //display error message to the user
  }
}
当isValid返回true时,这可以正常工作。内存差异为0 KB。但如果表单中有错误,则内存差为6-7KB。所以当CSV文件非常大时,我得到了一个允许的内存错误

我试着释放这种形式,比如:

unset($pf)
$pf = null;
$pf = new ProductForm();
没有成功。更糟

你有什么想法?
谢谢

您可以在数据库yml中禁用条令探查器:

  dev:
    doctrine:
      class: sfDoctrineDatabase
      param:
        profiler: false

将探查器设置为false没有区别。还是6-7KB…:是的,但是如果你尝试批量插入,在没有分析器的情况下,信条消耗的内存量非常低……我认为这不是问题所在。当窗体有效时,内存差为0。否则为6-7KB,几千行之后达到内存限制。doBind方法使用sfeventDispatcher通知错误。。。它可能是错误时内存泄漏的根源。也许你可以验证这个方法。我找到了一个方法:$pf->getValidator$fieldname->clean$field\u csv\u值并捕获一个sfvalidator错误