2016-07-07 83 views
3

当使用PhpExcel编写xls(xlsx)文件时,我遇到一些内存问题。我试图使用缓存,但在编写新文档时似乎不起作用。PHPExcel:写入期间无法使用缓存

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; 
$cacheSettings = array('memoryCacheSize' => '8MB' 
       ); 
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

的库更新到最新版本(V1.8.1)问题后已改善了一点,但还是我能够准备和出口只有8列和15000个文件 - 20000行(20000行与cache_in_memory_gzip )而不增加内存限制。不幸的是,在我的情况下,这不是足够的解

缓存方法可能允许我提前准备更多条目,但在实际写入方法期间没有任何问题。

$file = new PHPExcel(); 
    // Prepare data ... 
    $writer = PHPExcel_IOFactory::createWriter($file, 'Excel2007'); 
    $writer->save($pathname); // More memory required 
+0

您是否在实例化新的PHPExcel对象之前启用缓存___? –

+0

不要忘记,缓存不是完全消除内存限制的灵丹妙药;即使使用缓存,仍然存在一些内存开销,并且不同的缓存选项会有所不同,从而减少开销 –

+0

我尽快设置缓存。缓存方法可能允许我提前准备更多条目,但在实际写入方法期间,没有什么关系。 出于测试目的,我不使用数据库中的数据,而是使用一些预先设置的虚拟数据和循环。当使用数据库中的数据进行测试时,我得到的结果基本相同(请注意,我使用5000行步骤进行测试)。 – Wolfer

回答

1

最后我们切换到box/spout。 我不能说我已经测试过它的全部功能,但是我已经厌倦了80万行之后。

+0

箱子/喷口目前可能(** 2016-08-04 **)'缺少'一些造型和出口选项。但是在这种情况下,内存占用和行数是关键的。 – Wolfer