首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小型服务器上的大内存使用量(优化问题)

小型服务器上的大内存使用量(优化问题)
EN

Stack Overflow用户
提问于 2009-10-07 05:02:07
回答 3查看 163关注 0票数 0

我有一个应用程序,它分析我们的核心系统生成的输入文件中的数据。根据客户的不同,该文件的大小可能会有所不同(文件包含在线营销指标,如点击量、印象等)。我们的一个客户有一个网站,它获得了相当大的流量,生成的指标文件大小约为3-4兆字节。这个应用程序目前一次分析三个文件,每个文件是一个不同的时间集合。

我使用CSV迭代器读入文件,它将整个文件的内容存储到一个多维数组中。其中一个特定文件的数组大约有16000个元素长,每个子数组有31个元素。处理加载此数据的数据处理器对象使用了大约50MB的内存。目前,PHP内存限制设置为100MB。不幸的是,此应用程序所在的服务器太旧,无法处理大量的内存增加。

因此,这就引出了一个问题:如何优化处理这种大小的文件?

可能的优化是读取文件的一部分,计算,存储,重复吗?

EN

回答 3

Stack Overflow用户

发布于 2009-10-07 05:24:54

您可以修改CSVIterator,一次读取文件的某些部分,或者一次读取一行。

代码语言:javascript
复制
$handle = fopen("/tmp/inputfile.txt", "r");
if ($handle) {
  while(!feof($handle)){
    $buffer = fread($handle, 4096);
    echo $buffer;
  }
}

代码语言:javascript
复制
$handle = fopen("/tmp/inputfile.txt", "r");
if ($handle) {
  while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    echo $buffer;
  }
  fclose($handle);
}
票数 1
EN

Stack Overflow用户

发布于 2009-10-07 05:20:20

你在正确的轨道上。如果可能的话,读一行,对它做你需要做的任何事情(计数,等等),然后丢弃这行。

请参阅fgets()的示例

票数 0
EN

Stack Overflow用户

发布于 2009-10-07 05:22:50

为什么不简单地逐行阅读文件...->读取行->存储你需要的东西,更新你的统计数据->读下一行,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1529563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档