use*_*801 5 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
Run Code Online (Sandbox Code Playgroud)
手册说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);
Run Code Online (Sandbox Code Playgroud)
任何人都可以阐明这个谜团吗?
这取决于许多因素,包括PHP版本,单元格内容(数字,字符串,富文本等),为PHP启用的扩展等; 所以除了你自己以外的任何人都不可能真正回答,因为它对你的情况来说是独一无二的.
但是,所有方法都保留了有关内存中每个单元格的一些信息,但SQLite除外,因此使用SQLite数据库是内存效率最高的选项.
编辑
几个月前,我针对不同版本的PHP运行了一些不同的缓存方法测试,以下总结了结果


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