【问题标题】:Lowest Memory Cache Method for PHPExcelPHPExcel 的最低内存缓存方法
【发布时间】:2014-12-22 17:09:58
【问题描述】:

我尝试使用 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);

谁能解开这个谜团?

【问题讨论】:

    标签: benchmarking phpexcel


    【解决方案1】:

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

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

    编辑

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

    这些仍然是相当随意的结果,磁盘速度和其他因素会影响某些缓存方法(如 disisam 和 phptemp)的性能,以及 phptemp 等选项的任何配置设置也会有一些影响;但它应该提供一个相对的指导,以确定哪些选项更适合内存,哪些选项更适合执行速度。

    【讨论】:

    • 对于不关心执行时间但有内存限制的服务器的一般规则,您是否建议使用 SQLite3 作为最佳选择?
    • SQLite3 是一个选项,内存是个问题(执行速度较慢不是问题),那么是的,我会推荐使用 SQLite3 缓存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2011-01-31
    • 2014-09-21
    • 1970-01-01
    • 2018-04-04
    • 2014-07-16
    相关资源
    最近更新 更多