我尝试使用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);
任何人都可以阐明这个谜团吗?
答案 0 :(得分:7)
这取决于许多因素,包括PHP版本,单元格内容(数字,字符串,富文本等),为PHP启用的扩展等;所以除了你自己以外的任何人都不可能真正回答,因为它对你的情况来说是独一无二的。
但是,所有方法都保留了有关内存中每个单元格的一些信息,但SQLite除外,因此使用SQLite数据库是内存效率最高的选项。
修改强>
我几个月前针对不同版本的PHP运行了一些不同的缓存方法测试,以下总结了结果
这些仍然是相当随意的结果,磁盘速度和其他因素会影响某些缓存方法(如discisam和phptemp)的性能,而像phptemp这样的选项的任何配置设置也会产生一些影响;但它应该给出一个相对的指导方针,以确定哪些选项更适合记忆,哪些更好的执行速度。