C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 自作の構造体の方が遅くなる理由


(過去ログ 176 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■101278 / inTopicNo.1)  自作の構造体の方が遅くなる理由
  
□投稿者/ ぼんど (1回)-(2023/01/28(Sat) 19:41:55)

分類:[.NET 全般] 

VB.NETを使っております。

以下のような自作の3次元構造体を使用しています。

    Public Structure PointF_3D

        Property X As Single
        Property Y As Single
        Property Z As Single

    End Structure


実はこれと同じ機能をもった構造体でVector3とよばれるものが、
OpenTK.DLLに含まれています。

https://opentk.net/api/OpenTK.Mathematics.Vector3.html

基本は上記の自作の構造体と同じなのですが、
LengthSquaredやYxzやXyzなど多数のメソッドが含まれています。
そのため、自作の構造体の方がシンプルなので、
高速化できると予想しました。

しかし、実際に計算速度を比較してみると、
OpenTK.DLLのVector3の方が30%程度高速化できることが分かりました。
デバッグモードでテストすると、更に3倍程度も速度に差が見られます。

一体、なぜこのような速度の差が見られるのでしょうか?

自作の構造体でも高速化することは可能なのでしょうか?


なお、速度比較は以下のようなもので行っています。


            Dim ss As New Stopwatch

            Dim hh As Integer = 100000000

            Dim aa(hh) As OpenTK.Vector3
            Dim bb(hh) As PointF_3D

            Dim RefVal1 As New OpenTK.Vector3(0.5, 0.1, 0.3)
            Dim RefVal2 As New PointF_3D(0.5, 0.1, 0.3)


            ss.Restart()



            For i = 0 To hh

                '384ms
                aa(i).X = RefVal1.X
                aa(i).Y = RefVal1.Y
                aa(i).Z = RefVal1.Z


            Next


            MsgBox(ss.ElapsedMilliseconds)


            ss.Restart()


            For i = 0 To hh

                '543ms
                bb(i).X = RefVal2.X
                bb(i).Y = RefVal2.Y
                bb(i).Z = RefVal2.Z

            Next


            MsgBox(ss.ElapsedMilliseconds)


引用返信 編集キー/
■101279 / inTopicNo.2)  Re[1]: 自作の構造体の方が遅くなる理由
□投稿者/ 伝説のカレー (69回)-(2023/01/28(Sat) 20:26:24)
No101278 (ぼんど さん) に返信

プロパティをフィールドにしたら速くなるんじゃないですかね
引用返信 編集キー/
■101280 / inTopicNo.3)  Re[1]: 自作の構造体の方が遅くなる理由
□投稿者/ KOZ (386回)-(2023/01/28(Sat) 20:26:31)
No101278 (ぼんど さん) に返信
> しかし、実際に計算速度を比較してみると、
> OpenTK.DLLのVector3の方が30%程度高速化できることが分かりました。

プロパティとフィールドの差かと思います。

    Public Structure PointF_3D
        Public X As Single
        Public Y As Single
        Public Z As Single
    End Structure

とするとどうでしょうか?

引用返信 編集キー/
■101281 / inTopicNo.4)  Re[2]: 自作の構造体の方が遅くなる理由
□投稿者/ ぼんど (2回)-(2023/01/28(Sat) 21:10:46)
仰る通り、高速化できました
こういうことだったのですね
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -