アプリ版:「スタンプのみでお礼する」機能のリリースについて

最大80MBまで増加するテキストファイルがあります。
あるアプリケーションのログファイルです。
最大80MBまで達します。
80MBまで達したら新しいファイルが作成され、
そこにログが出力されます。

このログファイルの中身を読み取り、
ある処理をして、計算結果や、必要な箇所を別のテキストファイルに
出力するプログラムを作成しました。言語はVBScriptです。
このプログラムを10分に一度実行する必要があります。

そこで問題になってしまったのが、処理時間です。
前回の処理が終わらないまま10分が経過して
次の処理が開始されてしまうのです。
特にまずいのがデータ量の多い期末や年度末です。

そこでVBScriptよりも速くテキスト処理を行える言語を教えて下さい。
BATでもJScriptでもPerlでもCでもC++でもJavaでも何でも良いです。

教えて下さい。
よろしくお願いします。

A 回答 (5件)

>ある処理をして


この内容によるのではないでしょうか。
私も似たようなことをしていまして、VBAでは遅い
ため、Cでマルチスレッドを使い、複数のファイルを
同時に処理して情報を収集することで高速化を図り
ました。しかし、情報の収集事態は格段に速くなり
ましたが、最終的にはExcelに出力されるため、
出来上がりの速度は目に見えた恩恵は得られて
いません。

解決手段ですが、先ずはマルチスレッドを進めます。
ディスクIOの多いプログラムではIO完了を待たずに
平行して処理が実行できるため効果が大きいのです。
これがダメならマルチプロセスによる処理です。
プロセス間は同期を取るのが難しいのですが、VBでも
実行可能な点が魅力です。情報や制御はウィンドウを
使うと便利です。
しかも、どういうわけか理論値より高速です。つまり、
2スレッドで処理すると、シングルスレッドに比べて
理論上は処理時間が半分になるはずですが、1/3とか
1/4になることが多いのです。
マルチスレッドやマルチプロセスを制御できる言語では
C、C++、Javaがあります。マルチプロセスならVBでも
使用可能です。尚、VBSはWindowsAPIが使えないので
不適当です。
    • good
    • 0

言語よりもプログラムを見直す必要があると思いますが、


既に大きいメモリ領域を確保して、その上でオンメモリで処理させているなら無用な話ですが、
HDDにそのログファイルや作業データを置いて処理しているなら、
メモリを増設してそれをRAMディスクにすれば処理を高速化できるのではと思います。
SSDと言う手もありますが、高価だし書き込みは遅いので、一時的なデータの置き場ならRAMディスクの方に分があります。
処理が済んでから保存するデータをHDDにコピーして保存させればいいでしょう。
    • good
    • 0

Perlなんかが速いと思います。


もっと速く!というのであればC/C++で書くのがいいでしょう。



プログラム、というかやり方にそもそも問題があるように思えます。

10分ごとに毎回、ログファイルを頭から読んで処理するのでしょうか?

たとえば
以前に読んだ部分は読み飛ばして増加した行だけを読み込み
前回の処理結果に追加する、
というようなやり方を検討する必要があると思います。

それと案外、DISKアクセスのスピードもバカになりません。
対象のファイルがもしネットワークドライブに存在するとかなら
ローカルで処理するようにするべきでしょうし、
ファイルを読み込みながら結果を書き出す、というやり方をしているのであれば
最初に全てメモリに読み込んで処理をしてあとから一気に書き出す
という方法に変えるなど。

どうしても10分毎にやらないといけない処理だけに絞り込んで
残りは夜間バッチでやるとか。

そもそも10分毎をやめて30分毎ぐらいで妥協するとか。

あとは処理速度の速いマシンで実行するようにする、
メモリをめいいっぱい積み込む、
などなど。
    • good
    • 0

主観でお答えしてよいのでしたら、Perlかと思います。


そもそも、大容量のファイルを一度に処理しようとするとキャッシュが一杯になるかもしれませんし、ディスクI/Oも食われるため余計に処理時間がかかると思います。

一旦、テンポラリにコピーして分割するのはいけないのでしょうか?
こちらの方が書かれているのがPerlでファイル分割するスクリプトです。
http://7to3.net/journal/2008/03/17/perl/

当然、容量を指定して分割するスクリプトも書けるとは思います。
その後、ゆっくりVBScriptでテキスト処理するのはどうでしょうか?

システムの都合でそれができないのでしたら仕方ないかと思いますが。
    • good
    • 0

> そこでVBScriptよりも速くテキスト処理を行える言語を教えて下さい。



多分言語の問題ではなくて、プログラム自体の問題だと思う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!