0

文字列の 2 つの大きな配列があります (それぞれに ~90000 個の要素があります)。
コマンドで作成しますset -A。そして、最初の配列のどの文字列が2番目の文字列と同じでないかを把握する必要があります。
私のコード:

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 に答える