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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 >>
■82357  Re[10]: VBでCRC32を高速で計算する方法
□投稿者/ Azulean -(2017/01/04(Wed) 21:17:28)
    2017/01/04(Wed) 21:20:28 編集(投稿者)

    No82356 (ぎゅんぎゅ さん) に返信
    > 結局、VBで書いたものをC#に書き換えて、
    > DLL化してVBで呼んでみましたが
    > なぜか30%くらい遅くなってしまいました。
    > 一般的にC#の方がVBよりも高速なのになぜでしょうか?

    材料なしに断言できる人はいません。
    推測でものを言うとすれば、その書き換えがよくない(不得手であるが故に非効率なコードを書いている)ことが有力候補ですが、ほかの理由もあるかもしれません。

    キャストとか、四捨五入とか、比較とか、そういったコードが不用意に増やされているなら遅くなるとは思いますが。
    (そのほか、大量の配列アクセスをしたいなら unsafe コンテキストやポインターの概念の理解も必要になるでしょうね)


    > もしかしてVBからC#のDLLを読み込むことで遅くなっているのでしょうか?

    VB.NET から VB.NET の DLL を呼ぶことと、VB.NET から C# の DLL を呼ぶことによる差は、基本的にはありません。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82358  Re[10]: VBでCRC32を高速で計算する方法
□投稿者/ Jitta -(2017/01/05(Thu) 08:56:36)
    No82356 (ぎゅんぎゅ さん) に返信

    > 一般的にC#の方がVBよりも高速なのに
    この判断の根拠はなんですか。
    まず、判断の根拠と観測結果を具体的に示してください。
    具体的というのは、実行したCPUの型番、
    搭載メモリ量、OSのSPを含むバージョン、
    5~10回実行した平均値、位は最低限。


    > もしかしてVBからC#のDLLを読み込むことで遅くなっているのでしょうか?
    そう思うなら、その辺りの事を調べてみてはどうでしょうか。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82359  Re[11]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/05(Thu) 10:26:00)
    みなさん、ご回答ありがとうございます。

    いったん、締め切らせていただきます。
     
記事No.82326 のレス / END /過去ログ140より / 関連記事表示
削除チェック/

■82361  Re[12]: VBでCRC32を高速で計算する方法
□投稿者/ Jitta -(2017/01/05(Thu) 11:23:29)
    No82359 (ぎゅんぎゅ さん) に返信
    > みなさん、ご回答ありがとうございます。
    >
    > いったん、締め切らせていただきます。
    >  

    あらら
    一応、Cのライブラリ作ったら2秒台でした。
    ただ、CRCの結果がVB.NET、C#、C、どれも異なるんだよなぁ。
    ウェブからコピペしただけなのになぁ。。。
記事No.82326 のレス / END /過去ログ140より / 関連記事表示
削除チェック/

■82362  Re[13]: VBでCRC32を高速で計算する方法
□投稿者/ ガラン -(2017/01/05(Thu) 12:12:31)
    No82361 (Jitta さん) に返信
    > ただ、CRCの結果がVB.NET、C#、C、どれも異なるんだよなぁ。
    > ウェブからコピペしただけなのになぁ。。。

    CRCはシフトの方向や初期値、生成多項式によって結果が変わります。
    コピペするだけじゃなくてちゃんと理解してプログラムを書いてください。
    ちゃんとやってください。(煽ってみる)
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82363  Re[14]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/05(Thu) 12:17:43)
    > Cのライブラリ作ったら2秒台でした。

    私もC++でDLLを作りたいのですが
    その方法をどうかお教えください。
     
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82366  Re[15]: VBでCRC32を高速で計算する方法
□投稿者/ Jitta -(2017/01/05(Thu) 14:18:47)
    No82363 (ぎゅんぎゅ さん) に返信
    >>Cのライブラリ作ったら2秒台でした。
    >
    > 私もC++でDLLを作りたいのですが
    > その方法をどうかお教えください。
    >  

    あっちのスレに任せる。

    ここの最初のVBのコードで、テーブルを作る式に誤りがあります。
    貧弱な入力環境なので、個所の指定までは勘弁。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82387  Re[16]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 08:41:22)
    そもそもファイルのロードが含まれてるので、キャッシュ状況などで速度は全く変わります。
    だから単純に計算速度知りたいなら計算だけの速度調べないと何ともいえません。
    でロードと計算を単純に繰り返すやり方だと計算を最速ではできないので、どうやっても最大速度は出せないと思います。
    ちなみに自作のC#のハッシュ計算ツールは、CRC32単体だと最速で2秒弱だった気がします。
    ※ただしPentiumM、ロードと計算は並列化しています。
    ただし計算方法自体は特に凝ってません。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82389  Re[17]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 09:29:42)
    No82387 (なちゃ さん) に返信
    > そもそもファイルのロードが含まれてるので、キャッシュ状況などで速度は全く変わります。
    > だから単純に計算速度知りたいなら計算だけの速度調べないと何ともいえません。
    > でロードと計算を単純に繰り返すやり方だと計算を最速ではできないので、どうやっても最大速度は出せないと思います。

    と思ったけどキャッシュにさえ乗ってればあまり影響なさそうな感じですね。
    というか並列化したほうはよけいな処理で負荷になってる感じかな(そもそも異なるハッシュの並列計算用)。

    ちなみにVB版のMD5が速いのは、VBなのに速いわけではなくて、内部ネイティブのライブラリを使用する版を使っているためです。
    おそらく結構最適化されたC++版くらいのイメージです。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82388  Re[17]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/06(Fri) 09:27:46)
    なちゃさんロードと計算を並列化するにはどうしたら良いですか?

    下のコードでマルチスレッドできるのは分かるのですが
    計算した結果を得るにはどうしたら良いですか?
    計算結果をパブリック変数にして、
    元のスレッドで受け取るしかないですか?

    MultiProgram_run = New System.Threading.Thread( _
    New System.Threading.ParameterizedThreadStart(AddressOf Program_run1xx))
    MultiProgram_run.IsBackground = True

    MultiProgram_run.Start()

    あと、既にフォームの動作をフォアグラウンドとして、
    計算全体をバックグランドにしてあるのですが
    バックグランドの計算の中で
    更にバックグラウンド計算を行うことはできるのでしょうか?

記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82390  Re[18]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 09:33:38)

    > ■No82388 (ぎゅんぎゅ さん) に返信
    > なちゃさんロードと計算を並列化するにはどうしたら良いですか?
    >
    > 下のコードでマルチスレッドできるのは分かるのですが
    > 計算した結果を得るにはどうしたら良いですか?
    > 計算結果をパブリック変数にして、
    > 元のスレッドで受け取るしかないですか?

    いや、そんな単純な話じゃないので多分無駄です。
    ロードと計算を並列にやる必要があります。
    まあそのためにやるほどの価値は多分なさそうです。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82391  Re[19]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/06(Fri) 09:39:51)
    勉強のために
    並列計算の仕方をお教え願えないでしょうか?

    必要なキーワードやコードだけでも構わないので
    教えてください
     
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82392  Re[20]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 09:57:19)
    ちょっといくつか。
    まず、並列化してもあまり意味なさそうと書いたのは計測結果の見間違いで、実際にはMD5の計測よりもさらに2割前後速くなっていました。
    なので意味はありそうです。
    ただし並列化はそこまで簡単ではないです。

    計算処理を一定サイズのチャンク単位で繰り返すようにして、チャンク分の計算用にバッファ2こ用意します。
    ロードを行うスレッドは全力でファイルを読み込み、バッファが一杯になれば計算スレッドに次のバッファが使えることを通知します。
    計算スレッドは逆に、チャンクの計算が終わったら、前のバッファに続きを読み込んで良いことを、読み込みスレッドに通知します。
    また読み込みスレッドから通知済みなら次のバッファの計算を開始します。
    そういう感じでバッファを使い回ししながらそれぞれのスレッドができるだけ全力で走るようにします。
    バッファを3つ使えばスレッド間調整がやや減らせそうですが、実質的にはあまり変わらなそうです。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82393  Re[21]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/06(Fri) 10:06:07)
    ありがとうございます。

    日本語で書くと簡単なのですが
    VBを使って具体的にコードを書く場合にはどうしたら良いですか?

    MultiProgram_run = New System.Threading.Thread( _
    New System.Threading.ParameterizedThreadStart(AddressOf Program_run1xx))
    MultiProgram_run.IsBackground = True

    MultiProgram_run.Start()

    このコードを使うというので合っていますか?

    もっと良い方法があれば教えてください
     
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82394  Re[22]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 10:15:58)
    並列化の方はどうもキャッシュが安定してないですね…
    遅い状態だとふつうにやるのと変わらなさそうです。
    速いときは3割以上速くなりますね。

    並列化は、そんな簡単な話じゃないので、上の日本語で理解できるようになってから作ってください。
    今の状態では無理があります。
    というかきっちり分かってないとバグバグになってどうにもならなくなりますよ。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82395  Re[23]: VBでCRC32を高速で計算する方法
□投稿者/ ぎゅんぎゅ -(2017/01/06(Fri) 10:26:41)
    とりあえず
    VBで書いた場合の
    キーワードだけでもお教え願えないでしょうか?
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82396  Re[24]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 11:32:38)
    No82395 (ぎゅんぎゅ さん) に返信
    > とりあえず
    > VBで書いた場合の
    > キーワードだけでもお教え願えないでしょうか?

    先に書いたとおりにスレッド間で強調するなら普通にThreadを使ってスレッド開始、計算処理をワークとして扱うならTaskなどを使ってもよい。
    スレッド間の協調はAutoResetEventなど。
    ただしワークとしてTask使うなら特別使う必要はなさそう。

    キーワードといってもこんな話で、スレッド関連のクラスの使い方だけ調べても意味が無く、それらの道具をどのように使って前の日本語で書いた処理を実装するかが肝です。
    やり方はいくらでもあるので、キーワードだけ出してもあまり意味はありません。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82398  Re[25]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 15:19:44)
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82399  Re[26]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 15:57:24)
    No82398 (なちゃ さん) に返信
    > 参考(見えるかな?)
    > md5のやつでc#ですが。
    >
    > http://climbi.com/static/8894-0.txt

    CRC32の実装としては、force-net Crc32で検索して出てくるのがかなり速そうです。
    md5よりさらに速いです。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82400  Re[27]: VBでCRC32を高速で計算する方法
□投稿者/ なちゃ -(2017/01/06(Fri) 18:14:12)
    No82399 (なちゃ さん) に返信
    > ■No82398 (なちゃ さん) に返信
    >>参考(見えるかな?)
    >>md5のやつでc#ですが。
    >>
    >>http://climbi.com/static/8894-0.txt
    >
    > CRC32の実装としては、force-net Crc32で検索して出てくるのがかなり速そうです。
    > md5よりさらに速いです。

    この実装で並列化を行うと、MD5で単純に実行したときの倍くらいのパフォーマンスになってるので、もしかしたら0.6秒とかくらいで実行できるかも知れません。
    まあ環境によるのでそんなには変わらないかも知れませんが。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 >>

ヒット件数が多いので過去ログ1〜140 までの検索結果 / 過去ログ141からさらに検索→

パスワード/

- Child Tree -