ではbash
スクリプト私はからのさまざまな値必要な/proc/
ファイルを。今までは、そのようにファイルを直接grepする数十行がありました。
grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo
それをより効率的にするために、ファイルの内容を変数に保存し、それをgrepしました:
a=$(</proc/meminfo)
echo "$a" | grep -oP '^MemFree: *\K[0-9]+'
ファイルを複数回開くのではなく、一度開くだけで変数の内容をgrepする必要があります。
bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null
real 0m0.803s
user 0m0.619s
sys 0m0.232s
bash 4.4.19 $ a=$(</proc/meminfo)
bash 4.4.19 $ time for i in {1..1000};do echo "$a"|grep ^MemFree; done >/dev/null
real 0m1.182s
user 0m1.425s
sys 0m0.506s
同じことが当てはまりますdash
とzsh
。/proc/
理由としてファイルの特別な状態が疑われましたが、コンテンツを/proc/meminfo
通常のファイルにコピーして使用すると、結果は同じになります。
bash 4.4.19 $ cat </proc/meminfo >meminfo
bash 4.4.19 $ time for i in $(seq 1 1000);do grep ^MemFree meminfo; done >/dev/null
real 0m0.790s
user 0m0.608s
sys 0m0.227s
hereの文字列を使用してパイプを保存すると、わずかに高速になりますが、ファイルの場合ほど高速ではありません。
bash 4.4.19 $ time for i in $(seq 1 1000);do <<<"$a" grep ^MemFree; done >/dev/null
real 0m0.977s
user 0m0.758s
sys 0m0.268s
変数から同じコンテンツを読み取るよりもファイルを開く方が速いのはなぜですか?
/proc/
理由としてファイルを、私はの内容をコピーする際に/proc/meminfo
通常のファイルと使用に結果が同じであることは、」それはないに特別な/proc/
ファイル、通常のファイルの読み取りも高速です!