我有两个大的字符串数组(每个字符串都有~90000个元素)。
我用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]
这样的问题有解决方案吗?
P.S。
kshVersion =版本AJM 93t + 2010-02-02
为了弄清楚使用了多少内存,我执行free -m
答案 0 :(得分:0)
我认为在Ksh中有特定的理由吗?尝试对这种表需要多少内存进行近似,并与RAM和SWAP的数量进行比较。我敢打赌,这不是一个特定的程序,而是在limits.conf或sysctl.conf中的一些每进程内存/交换使用限制。
您还可以尝试按照概念(如名字的第一个字母或其他内容)将数据拆分到某些组,以减少所需的内存量。您的代码可能远非最佳,最好首先收集您需要的所有信息然后重复使用它,而不是像您尝试的那样在嵌套循环中重复整个过程。