VB.NETで構造体への代入を高速に行うには?


.net初心者  2006-04-09 15:59:55  No: 94983

下記のように定義した構造体で、
StockTMP(5000) as myStock について
値の代入を行うと、私のマシンでは、
VB6.0    0.07秒
VB.NET   0.36秒
程度かかります。
このように、VB.NETになってから構造体が異常に遅くなり、困っています。

恐らく参照についての言語仕様が変更されたことによると思い、
以下のDouble型をObject型に変更したところ、ほぼ同じスピードに
なりました。しかし、これはOption Strict=Offの場合ですので、
Option Strict=Onではエラーとなってしまいます。
何か良い対処方法はないでしょうか。
よろしくお願いします。

    StockTMP(5000) as myStock 

    Public Structure myStock
        Public DataDate As Date
        Public Open As Double
        Public High As Double
        Public Low As Double
        Public Close As Double
        Public Volume As Double
    End Structure


.net初心者  2006-04-09 16:01:02  No: 94984

なお、値の代入は、StockTMP(0)〜StockTMP(2000)の2000要素程度です。
よろしくお願いします。


我龍院忠太  2006-04-10 18:12:47  No: 94985

宣言だけで、遅いと言われても・・・
Doubleで表すHighってもしかしたら銀河系の高さですか?


オショウ  2006-04-10 21:08:18  No: 94986

環境が解らないので、どうだとは直接的に言えませんし
尚且つ、どんなコーディングで代入されているのかも
解りません。

ただ、私の環境で仮にForループで、2000回、回して代入
し、構造体配列を初期化しましたが、計測不能な短時間
で終わりました。

360msecもかかる環境とコーディングの方が知りたいです。

以上。


ひろ  2006-04-10 23:02:38  No: 94987

暗黙の型変換が実行されるようなコードになっていませんか?


.net初心者  2006-04-11 08:49:10  No: 94988

ご回答いただいた皆様ありがとうございます。

実は、カンマ","で区切られたテキストデータをSplit関数で分割し、
このデータを上記のStockTMPに代入しています。

具体的なデータの例は、
1996/09/17,584,584,574,580,399000
1996/09/18,570,575,560,560,337000
・・・・・
です。

Split関数は文字配列を返すので、ひろさんがおっしゃるように
内部で暗黙の型変換が実行されているようです。

私が最初に質問した際に書いた秒数は、これをVB6.0とVB.NETで
実行した場合に、
VB6.0  0.07秒
VB.NET 0.36秒
程度になりました。ちなみに環境は、
Pen4 340MHz 2GB WinXP VB.NET 2005 (Express Edition)
です。

VB6.0のように高速に読込みをできないものでしょうか?
アドバイスをよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加