DOBON.NET DOBON.NETプログラミング掲示板過去ログ

3桁区切り処理の早い方法をご教授下さい

環境/言語:[XP VS2002.NET (VB)]
分類:[.NET]

2005/02/22(Tue) 09:42:06 編集(投稿者)

平ちゃんです。 いつもお世話になっています。

すみませんがまた宜しくお願いします。
一行6列の文字列をファイルから約5万行読み込んで
その内の3列が数値の為以下のように3桁区切りしています。


'3桁区切りをつける
s(3) = CInt(s(3)).ToString("#,##0")
s(4) = CInt(s(4)).ToString("#,##0")
s(5) = CInt(s(5)).ToString("#,##0")

処理行数が約5万行と多いためこの3桁区切り処理だけでかなり時間がかかっています。
3桁区切りのもっと早い方法をご存知の方是非教えてください。
2005/02/22(Tue) 09:45:06 編集(投稿者)

■No9286に返信(平ちゃんさんの記事)

自己レスです。

s(3) = Val(s(3)).ToString("#,##0")
s(4) = Val(s(4)).ToString("#,##0")
s(5) = Val(s(5)).ToString("#,##0")

でだいぶよくなりましたがまだ満足できません。

s(3) = CType(s(3), Integer).ToString("#,##0")
s(4) = CType(s(4), Integer).ToString("#,##0")
s(5) = CType(s(5), Integer).ToString("#,##0")

は最初と同じようなものでした。

宜しくお願いします。
パフォーマンス測定の結果の公表は禁止されています。
数字は消しましょう。
■No9289に返信(中博俊さんの記事)

ご注意ありがとうございます。
数値はあくまで数値として取得しておき、実際に表示する時にフォーマットした方が良くないですか?

流れとして、
1.5万件のデータを取得(構造体配列が望ましい)
2.データ表示のタイミングで、数値をフォーマット

別の方法として、
1.表示させるだけの範囲データを取得。同時にフォーマット
2.ページ移動のタイミングで範囲データを取得

結局のところ、処理に時間がかかるのなら、そのあたりの仕様を決めた方が良いと思います。
2005/02/22(Tue) 11:24:27 編集(投稿者)

 数値データを桁区切りの文字列として持つ必要性が今一つ解りません。表示で必要なのではないのでしょうか?
 データの持ち方を見直したほうが良いように思いますが、それはさておき。

 少し試してみました。
 Int32.Parse メソッドを使用しても Val 関数とほぼ同じになりました。型変換処理自体は短縮できないような気がします。
 一方書式指定文字列は N0 を指定したほうが若干早くなりそうです。尤も、微々たるものでしょうけども。


#あ、リロードし忘れてた。ぺがらぼさんと被っちゃいましたねm(__)m
2005/02/22(Tue) 13:01:40 編集(投稿者)
2005/02/22(Tue) 12:15:02 編集(投稿者)

平ちゃんです。

深山さんいつもご丁寧に有難うございます。

> 少し試してみました。
> Int32.Parse メソッドを使用しても Val 関数とほぼ同じになりました。型変換処理自体は短縮できないような気がします。
> 一方書式指定文字列は N0 を指定したほうが若干早くなりそうです。尤も、微々たるものでしょうけども。

このあたりが一杯一杯だと私も思います。

ぺがらぼさん、深山さん に仕様を指摘されまして、う〜ん ! 痛い所を
という感じです。


ぺがらぼさん、深山さん のアイデアを参考に文字列と数値混合のファイルのアクセス(Stream)の速度や
ソフト内の他の部分との関連を再検討してみます。
(実際に3桁区切りの処理速度アップだけではまだ不満ですので)

解決済みとさせて頂きます。

ぺがらぼさん、深山さん 有難うこざいました。今後とも宜しくお願いします。
解決済み!
■No9289に返信(中博俊さんの記事)
> パフォーマンス測定の結果の公表は禁止されています。

そのようなコメントは初めてお目にかかりますが、どこでどのように
書かれているのでしょうか?
参考までに教えて頂けませんか?
EULAをご覧ください。

5.2 ベンチマーク テスト
お客様は、事前にマイクロソフトからの書面による承諾を得ることなく、 .NET Framework 、 SQL Server コンポーネントまたは本ソフトウェア製品のベンチマーク テストの結果を第三者に開示することはできません。

VS2003を入れているならば以下のディレクトリに入っています。

C:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio .NET Enterprise Architect 2003 - Japanese\eula.txt

あなたも契約している文書ですよ。
> 5.2 ベンチマーク テスト
ありがとうございます。 たしかに書いてますね。
う〜ん せこいですね!
せこいって・・・子供じゃないんだから・・・

DOBON.NET | プログラミング道 | プログラミング掲示板