IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

サブディレクトリ内も一覧(その3)

      2015/02/04

本を買ってから「効率的なソース」について考えるようになった。とはいっても、数回の実行では目に見えて変わる事はないけど。

で、「サブディレクトリ内も一覧(その2)」を見てしまって「これはちょっと・・・」と思った(コスト表示した「その2」)。

で、ほぼ同じ物を新しく作ってみたら、時間が約半分になった(当社比)。結果的に「readdir」を一回で済むようにしたのが効いたのかもしれない。少なくとも、その発想が出ただけでも良しとしよう。

ただ、以前は使っていなかった「リファレンス」を使うようにしたので、ファイル数やディレクトリが多くなると、もっと短くなるかもしれない。

・・・と思ってやってみた。条件と結果は、以下のようになりました。


タイプ1タイプ2

ts0014pts0025
ts0014pts0025
総フォルダ数7010.445.82362.802.25
総ファイル数4,631424
総ファイルサイズ(バイト)12,843,6251,746,391
HTMLファイル数419252
HTMLファイルサイズ(バイト)2,314,124882,760

これだけで決めてしまうのはよくないけど、ファイル数が多いと「readdir」の回数が効いてくるようだ。でも、HTMLファイルの比率が高い場合は、それほど差がつかないのがちょっと残念。

ところで、「dumpvar.pl」と「dumpValueサブルーチン」は、(「リファレンス」を含む)配列、ハッシュを把握するのにとても役に立つパッケージで、「ActivePerl522」にはついている。これも前述の「実用 Perlプログラミング」に載っていたんだけど、実は非公開(非公式?)のパッケージらしい。

このサブルーチンを使うと、深い階層の配列やハッシュの値が、整形されて表示される。複雑な形式の変数を扱うときは、これで確認しながら作っていくと、デバッグもしやすいのでお奨めです。

使用する方法は、まず「dumpvar.pl」を「require」します。これは標準の「@INC」に入っていると思うので、探す必要はないと思います。そして、そのパッケージ内に存在する「dumpValue」サブルーチンに、表示したい配列、またはハッシュを「リファレンス」で渡します。すると、あら不思議。デバッグに有効な情報が手に入る。というわけです。是非試してみてください。

・・・ちょっと欠陥(ディレクトリ名が正しく取れない事があったみたいです)を見つけてしまったので、訂正しました。すると、悲しいかな、差が縮んでしまいました (T_T)

ただ、「ts0014p」にも新しい欠陥(ディレクトリの字下げが正しく行なわれていないみたいです)を見つけてしまったのですが・・・。

多少条件が変わりましたが、とりあえず、新しい結果を・・・。


タイプ1タイプ2
ts0014p11.152.80
ts00259.882.31

「タイプ1」が、かなり遅くなってしまいました。ディレクトリ情報を収集するだけで「6秒」ほどかかってしまいます。訂正方法が良くなかったのかもしれません。ディレクトリとファイルの区別を、もっと簡潔にできないものでしょうか・・・。

・・・

今回、ローカル環境から完全に移行するために「jcode.pl」に変更しました。

ついでに、リンク先も付け加えたのですが・・・。ハッシュは順不同で呼び出されるので、見事にリンクの順番が変わってしまいました・・・。いくつか先に、配列を2つ使ってリンクを作成するスクリプトがあるはずなので、これは愛嬌ということに・・・ (^^;;;

ここから追記(2000/12/14)

ハッシュは、順不同で呼び出される、じゃなくて、取り出しやすいように順不同で格納される、が正解。呼び出した結果だけ見れば同じようなものだけど・・・。

ソースコード

respo

respo link

ZenBackWidget

 - 情報技術について