【问题标题】:How to optimize the file processing?如何优化文件处理?
【发布时间】:2016-09-18 17:16:17
【问题描述】:

我正在编写一个 Perl/CGI 脚本,它读取一个 8MB 超过 100k 行的文件,并以 100 行的块显示它(使用分页)。

以下哪一项会更快

  1. 将整个输入文件存储到一个数组中,每页提取100行(使用数组切片)

    my @extract = @main_content[101..200];
    

  2. 对于每个页面,使用 sed 命令提取用户想要查看的任何 100 行。

    sed -n '101,200'p filename
    

【问题讨论】:

  • 如果您已经进行了一些会话管理,那么您应该为每个 100 行块存储 seek
  • 两者都试一下就知道了。答案在很大程度上取决于您的系统,而我们无权访问。
  • 另外,CGI 和速度并不完全是同义词。在持久环境中运行您的脚本。
  • 当您说“读取”时,它是从磁盘中读取的吗?用户是要立即翻页还是可以在运行时随时返回?他们是要来回走还是只走文件?这 100k 行不算什么——我只是通过在半秒内读取这样一个单行文件来计算 400k(眼球)。是的,你可以把它拉成一个数组,绑定它,寻找……为什么要优化这个任务?请更好地描述问题。
  • @zdim 我试过了,我将内容存储在一个数组中,然后将其绑定并读取。对于单个用户或几个用户,它可以正常工作(即加载速度快)。但是当用户数量增加或输入文件非常大(超过 80 MB)时,我的服务器将挂起。 This is for small size file within 5 MB 然后单击页面底部的标准视图,该视图用于 8 mb 以上的 cgi 响应(我通过 python cgi 使用 sed 命令尝试过)。

标签: performance perl sed


【解决方案1】:

如果你真的想要性能,那么不要使用 CGI,尝试使用在请求之间将数据的持久副本保存在内存中的东西。现在 8mb 很小,但是为每个请求加载是不明智的,也不会扫描整个文件。 Modperl 是这样做的旧方法,它是嵌入在网络服务器中的 perl 解释器,较新的方法是使用催化剂或舞者,这些说明超出了本回复的范围。如果 CGI 只是偶尔使用并且受密码保护以限制使用,那么您可以使用 CGI。

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2011-07-04
    • 2019-08-08
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多