Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP喷口读/写速度_Php_Excel_Phpexcel - Fatal编程技术网

PHP喷口读/写速度

PHP喷口读/写速度,php,excel,phpexcel,Php,Excel,Phpexcel,我正在使用喷口库在PHP中读写excel文件。我只是有一个关于速度的问题 当我尝试读/写100k条记录时,只花了15分钟 当我尝试读/写200k条记录时,现在需要1.5个小时 我一夜之间上传了60万张唱片,花了9个小时 我不知道是我的机器还是什么。但它不仅使发电时间增加了一倍 有加速的建议吗 提前感谢!:) 将数据写入电子表格所需的时间应或多或少与数据集的大小成比例。不过,阅读电子表格是不同的。有3种可能的选择: 电子表格使用内联字符串而不是共享字符串:读取时间应与数据集大小成比例 您的电子表

我正在使用喷口库在PHP中读写excel文件。我只是有一个关于速度的问题

当我尝试读/写100k条记录时,只花了15分钟 当我尝试读/写200k条记录时,现在需要1.5个小时

我一夜之间上传了60万张唱片,花了9个小时

我不知道是我的机器还是什么。但它不仅使发电时间增加了一倍

有加速的建议吗


提前感谢!:)

将数据写入电子表格所需的时间应或多或少与数据集的大小成比例。不过,阅读电子表格是不同的。有3种可能的选择:

  • 电子表格使用内联字符串而不是共享字符串:读取时间应与数据集大小成比例
  • 您的电子表格使用共享字符串:
    • 共享字符串的数量是有限的,可以放在内存中:读取时间应该与数据集大小成比例
    • 内存中的共享字符串太多:Spout会将共享字符串拆分为内存中可以容纳的块。每个区块都保存到磁盘,并且只有包含正在读取的字符串的区块才会加载到内存中
有了前两个选项,一切都很好,喷口尽可能快。但第三种选择需要更长的时间。这是避免失去记忆的陷阱。。。 如果电子表格使用或多或少有序的共享字符串(A1使用字符串1,B1使用字符串2…Z10使用字符串840),则性能命中不会那么糟糕(它添加了一些IO操作以从磁盘读取数据)。但是如果共享字符串不是(A1使用字符串1,但B1使用字符串200000-存储在另一个块中-而C1使用字符串3),因为Spout按顺序读取单元格,所以它必须执行更多IO操作才能在内存中加载正确的块

回到您的问题上来,您可以看看数据是如何在描述电子表格的XML文件中定义的。如果使用Spout创建电子表格,请确保使用内联字符串(最终文件大小会更大,但读取速度会更快)

您还可以修改此文件:。如果您知道所有字符都是1字节字符,则可以将可放入内存中的字符串数量增加4个(正如Spout假设使用4字节字符进行计算)


希望有帮助

喷口
!==<代码>PHPExcel