- PR -

VBマクロで作成した規模計測機能の限界?

1
投稿者投稿内容
OWL
会議室デビュー日: 2005/10/26
投稿数: 13
投稿日時: 2008-02-22 09:00
こんにちは。

組込み系での大規模システム開発に携わっております。
システムの規模は数百万ステップで、ソースファイルのディレクトイ構造も決まったルールなどなく複雑化しています。

そこで、開発の規模を計測し、結果をエクセルへ落とし込もうと、テキストファイルの行数計測とフォルダ検索機能を作成し、開発のRootの場所から検索してみました。(エクセルのマクロで作りました) しかし、規模の大きくないを箇所指定しても正常に動きますが大規模になると、計測開始し数時間放っておくとタスクがsuspendしたようになっているようです。(タスクマネージャでみると、CPU時間が増えなくなっている)

方法としては、計測結果をtype構造体の動的配列として使っています。ですので、タクマネージャで見ていると、最大メモリサイズがどんどん増えて、460MBくらいのところでsuspendしたようになっていました。
本当は、計測結果を少しずつエクセルのシートに書き出しsaveしながら、最大メモリサイズが大きくなりすぎないように調整すべきでしょうが、それにはかなりの手間がかかりそうです。
なにかうまい手はないものかと、投稿させて頂きました。

どうか、ご教示の程宜しくお願いします。m(-_-)m
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-02-22 09:53
引用:

OWLさんの書き込み (2008-02-22 09:00) より:

本当は、計測結果を少しずつエクセルのシートに書き出しsaveしながら、最大メモリサイズが大きくなりすぎないように調整すべきでしょうが、それにはかなりの手間がかかりそうです。


取得しているものを展開するだけなら手間ではないと思いますが... 今現在どんな結果はどのような形で出力されているのでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
OWL
会議室デビュー日: 2005/10/26
投稿数: 13
投稿日時: 2008-02-22 10:23
じゃんぬねっと様

ご連絡ありがとうございます。
実は、開発環境のフォルダ構成が複雑でして、そのツリー構造をエクセルシートにわかり易く貼り付けられるように工夫していまして、そこがちょっと複雑化しています。
フォルダの構成やサブフォルダのネストの深さは全くの任意名構成となっているので、その辺を、一度データをクリアにしてしまうと再検索開始場所の制御とかが面倒なのです。
あと、急いでいることもありまして・・・

なにか良い方法をご指導いただけますとたすかります
(VBがあまり専門ではないものですから)
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-02-22 11:33
引用:

OWLさんの書き込み (2008-02-22 09:00) より:
方法としては、計測結果をtype構造体の動的配列として使っています。ですので、タクマネージャで見ていると、最大メモリサイズがどんどん増えて、460MBくらいのところでsuspendしたようになっていました。


うろ覚えですが、たしかに Excel には400MB位の制約があったようななかったような気もします。ですので、メモリーを使わないような工夫をするのが素直なような気がします。今までオンメモリーでやってきたものを、メモリーの外に吐き出すようなことをするととたんに複雑になると思います。

まず 460MB も何に使っているのでしょうか?という疑問があります。「type構造体」の要素で減らせるものがないか検討されてはどうでしょうか。
「動的配列」というのは ReDim Preserve でしょうか?メモリーの制限とは別に、これはコピーのためにCPU時間とコピーのための一時的なメモリー容量を使うかもしれません。Preserve を使わなかったり Collection にするなども考えられます。

ただ、いずれにしてもPCの物理メモリーはフル(2GB以上)に近い実装をしてあることが条件です。いまどき、物理メモリーをケチる理由はありませんから。
OWL
会議室デビュー日: 2005/10/26
投稿数: 13
投稿日時: 2008-02-22 18:09
引用: ------------------------------------------------------------------------
まず 460MB も何に使っているのでしょうか?という疑問があります。「type構造体」の要素で減らせるものがないか検討されてはどうでしょうか。
「動的配列」というのは ReDim Preserve でしょうか?メモリーの制限とは別に、これはコピーのためにCPU時間とコピーのための一時的なメモリー容量を使うかもしれません。Preserve を使わなかったり Collection にするなども考えられます
-------------------------------------------------------------------------------

unibon様

ご指導ありがとうございます。
460Mというのは、複雑かつ多岐にわたる無秩序な開発環境のフォルダ構造を記憶するための空間です。これを分析して、環境の再構成・リファクタリング・再利用などの材料をするための指針を得ようとしております。
たしかに、おっしゃるように、きちんとメモリ空間の制限をつけてプログラミングし直すのが正論ですかね。。。(時間との兼ね合いなんですが)
ちなみに、構造体のメンバと少しだけ減らせたので、ページファイルのサイズを大きくしてリトライしてみています。

OWL
会議室デビュー日: 2005/10/26
投稿数: 13
投稿日時: 2008-02-26 12:54
お騒がせしましたが、、、

ページファイルの拡張で解決しました。

ですので、エクセルの限界ということではなかったですね。

みなさま、どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)