PHPExcel的最低内存缓存方法

时间:2014-12-22 17:09:59

标签: benchmarking phpexcel

我尝试使用PHPExcel手册第4.2.1节中的不同缓存方法。

做了100k行的基准测试,这里是结果

gzip = time=50,memoryused=177734904
ser  = time=34,memoryused=291654272
phptm= time=41,memoryused=325973456
isamm= time=39,memoryused=325972824

手册说phptmp和isamm方法使用磁盘而不是内存。因此,他们应该使用最少的记忆,但似乎这是相反的。

以下是我用来测试的代码:

                $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
//              $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
//              $cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
//          $cacheSettings = array( 'memoryCacheSize'  => '8MB');               
//              $cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_discISAM;

                PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

                $xlsReader = PHPExcel_IOFactory::createReader($fileType);
                $xlsReader->setReadDataOnly(true);

任何人都可以阐明这个谜团吗?

1 个答案:

答案 0 :(得分:7)

这取决于许多因素,包括PHP版本,单元格内容(数字,字符串,富文本等),为PHP启用的扩展等;所以除了你自己以外的任何人都不可能真正回答,因为它对你的情况来说是独一无二的。

但是,所有方法都保留了有关内存中每个单元格的一些信息,但SQLite除外,因此使用SQLite数据库是内存效率最高的选项。

修改

我几个月前针对不同版本的PHP运行了一些不同的缓存方法测试,以下总结了结果

enter image description here

enter image description here

这些仍然是相当随意的结果,磁盘速度和其他因素会影响某些缓存方法(如discisam和phptemp)的性能,而像phptemp这样的选项的任何配置设置也会产生一些影响;但它应该给出一个相对的指导方针,以确定哪些选项更适合记忆,哪些更好的执行速度。