文字列連結の高速化(VB6.0)_1 (No.1の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 13:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][基本コード] * * キーワード:ファイル入出力,,,,, * ***********************************************************************************
---------------------------------------------------------------------- Re: 文字列連結の高速化 - とうきちろう 2004/06/10-19:33 No.9221 ----------------------------------------------------------------------
前:113.77秒 後:3.30秒 約34.48倍
環境:Win2000 VB6
Const MAX_VALUE = 100000 Const END_OF_LOOP = (MAX_VALUE / 5&) - 1&
Const ADD_VALUE = 55555 Const INITIAL_VALUE = 12345&
Private Sub Command1_Click() Dim tm As Long Dim data As String tm = Timer data = func MsgBox Timer - tm End Sub
Private Function func() Dim i As Long
Dim sCurrStr As String Dim lCurrVal As Long
Dim lLoop As Long
lCurrVal = INITIAL_VALUE
For lLoop = 1 To END_OF_LOOP sCurrStr = sCurrStr & CStr(lCurrVal) lCurrVal = lCurrVal + ADD_VALUE Next
func = sCurrStr End Function
|
文字列連結の高速化(VB6.0)_2 (No.2の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 13:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][基本コード] * * キーワード:ファイル入出力,,,,, * ***********************************************************************************
-------------------------------------------------------------------------- Re^2: 文字列連結の高速化 - 魔界の仮面弁士 2004/06/11-00:08 No.9227 --------------------------------------------------------------------------
> 方法を問わないなら
結果が常に一定の文字列なので、結果の代入だけなら 0.08秒でした。(^^;)
ま、それは反則として。 ループで作成するなら、結果を一時ファイルに吐いて、 それを一括してGet#→StrConvする手法で 0.36秒でした。
また、常套手段なJoin法、Midステートメント法は、それぞれ0.52秒、0.28秒でした。
# 高速化前コードの実行時間は内緒。(謎
|
文字列連結の高速化(VB6.0)_3 (No.3の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 13:18
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][基本コード] * * キーワード:ファイル入出力,,,,, * ***********************************************************************************
--------------------------------------------------------------------------- Re: 文字列連結の高速化 - 花ちゃん 2004/06/11-00:16 No.9228 ---------------------------------------------------------------------------
Join 法 0.15 秒 Mid 法 0.11 秒 元々 150 秒
--------------------------------------------------------------------------- Re: 文字列連結の高速化 - まんたろー 2004/06/11-09:27 No.9231 ---------------------------------------------------------------------------
やっぱり、みんな考えることは同じですね。 私はJoinでやりました。
|
文字列連結の高速化(VB6.0)_4 (No.4の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 13:18
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][基本コード] * * キーワード:ファイル入出力,,,,, * ***********************************************************************************
---------------------------------------------------------------------------- Re^2: 文字列連結の高速化 - Say 2004/06/11-20:38 No.9268 ----------------------------------------------------------------------------
> 何かすごい方法とか無いんですかね? 「常套手段」というやつは、それなりに試した結果 常套手段になっているわけですから・・・。
すごくはないけど、VBにしてはちょっとひねたやり方をひとつ・・・ Cならポインタ使って、もうちょっとましな書き方ができますが。
(あんまり吟味してないんで、バグってるかも。 再帰にすればコードは簡単になりますが、処理は遅くなるでしょう。)
Private Function func() Dim i1 As Long Dim i2 As Long Dim i3 As Long Dim i4 As Long Dim i5 As Long Dim i6 As Long Dim j As Long Dim tmp(100000 * 6& * 4) As Byte For i1 = 0& To 9& tmp(i1 * 2&) = 48 + i1 Next For i1 = 1& To 9& For i2 = 0& To 9 j = (i1 * 10& + i2) * 4& - 20& tmp(j) = 48& + i1 tmp(j + 2&) = 48& + i2 Next Next For i1 = 1& To 9& For i2 = 0& To 9& For i3 = 0& To 9& j = (i1 * 100& + i2 * 10& + i3) * 6& - 220& tmp(j) = 48& + i1 tmp(j + 2&) = 48& + i2 tmp(j + 4&) = 48& + i3 Next Next Next For i1 = 1& To 9& For i2 = 0& To 9& For i3 = 0& To 9& For i4 = 0& To 9& j = (i1 * 1000& + i2 * 100& + i3 * 10& + i4) * 8& - 2220& tmp(j) = 48& + i1 tmp(j + 2&) = 48& + i2 tmp(j + 4&) = 48& + i3 tmp(j + 6&) = 48& + i4 Next Next Next Next For i1 = 1& To 9& For i2 = 0& To 9& For i3 = 0& To 9& For i4 = 0& To 9& For i5 = 0& To 9& j = (i1 * 10000& + i2 * 1000& + i3 * 100& + _ i4 * 10& + i5) * 10& - 22220& tmp(j) = 48& + i1 tmp(j + 2&) = 48& + i2 tmp(j + 4&) = 48& + i3 tmp(j + 6&) = 48& + i4 tmp(j + 8&) = 48& + i5 Next Next Next Next Next j = j + 10& tmp(j) = 49 tmp(j + 2&) = 48 tmp(j + 4&) = 48 tmp(j + 6&) = 48 tmp(j + 8&) = 48 tmp(j + 10&) = 48 func = tmp() End Function
|
|