0

我有两个大字符串数组(每个都有 ~90000 elems)。 我用命令
创建它们。set -A而且我需要弄清楚第一个数组中的哪些字符串在第二个中没有相等的字符串。
我的代码:

for i in {0..${#hard_drive_files[*]}}; do          

    has_reference=false
    for j in {0..${#files_in_db[*]}}; do    
        if [[ ${files_in_db[j]} == ${hard_drive_files[i]} ]]; then
            has_reference=true
            break
        fi  
    done 

    if [[ $has_reference == false ]]; then
        echo "${hard_drive_files[i]}"
    fi     
done

这部分代码“吃掉”了太多的内存。
在执行结束时已用内存的值约为 80000 MB
在这部分代码之后,我尝试归档一些文件但得到cannot fork [Cannot allocate memory]
这样的问题有解决方案吗?

PS kshVersion=Version AJM 93t+ 2010-02-02
为了计算出使用了多少 ram 内存,我执行free -m

4

1 回答 1

0

我认为在 Ksh 中有特定的理由这样做吗?尝试对此类表需要多少内存做出一些近似,并与 RAM 和 SWAP 的数量进行比较。我敢打赌,这不是一个专门的程序,而是limits.conf或sysctl.conf中的一些每个进程的内存/交换使用限制。

您还可以尝试按概念将数据拆分到某些组,例如名称的第一个字母或其他内容,以减少所需的内存量。您的代码可能远非最佳,最好首先收集您需要的所有信息然后重用它,而不是像您尝试做的那样在嵌套循环中重复整个过程。

于 2012-10-16T07:34:33.040 回答