2004年05月20日
川俣晶の縁側ソフトウェア技術雑記total 5341 count

VB.NETの=演算子のオーバーヘッド・C#の=演算子より遅い?

Written By: 川俣 晶連絡先

 菊池和彦の足跡文字列比較のパフォーマンスを見て、VB.NETの文字列比較が具体的にどう処理されているのかが気になったのでちょっと調べてみました。

 具体的には、Option Compare Binaryの場合と、Option Compare Textの場合で、生成するコードにどのような差があるのか、調べてみました。

 Option Compare Textの場合は重い処理になるのはやむを得ないとしても、Option Compare Binaryは軽くても良いのではないか、と思ったのですが。

 結果は以下のごとくしです。

 両者の相違は、Microsoft.VisualBasic.CompilerServices.StringType::StrCmpを呼び出す引数の値が違うだけ。(相違点を強調で示してあります)

 つまり、このメソッド自身の処理は、Option Compare Binaryの方が軽いとしても、呼び出しのオーバーヘッドは同じということになります。C#の==演算子で呼び出す文字列比較メソッドを使う場合よりも、引数が多く、内部で引数の判定も行う必要がある(と思う)ので、それだけ見ても同じ速さにならないのは当然と思われます。

 というわけで、力尽きたので、検証はここまで (汗

文字列をバイナリ比較するテスト §

VB.NETソース §

Option Compare Binary

Public Class binaryClass1

    Public Function test(ByVal a As String, ByVal b As String)

        Return a = b

    End Function

End Class

.NET Reflectorによる逆アセンブルリスト §

.method public instance object test(string a, string b) cil managed

{

// Code Size: 22 byte(s)

.maxstack 3

.locals (object V_0)

L_0000: nop 

L_0001: ldarg.1 

L_0002: ldarg.2 

L_0003: ldc.i4.0 

L_0004: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StringType::StrCmp(string, string, bool)

L_0009: ldc.i4.0 

L_000a: ceq 

L_000c: box bool

L_0011: stloc.0 

L_0012: br.s L_0014

L_0014: ldloc.0 

L_0015: ret 

文字列をTEXT比較するテスト §

VB.NETソース §

Option Compare Text

Public Class textClass1

    Public Function test(ByVal a As String, ByVal b As String)

        Return a = b

    End Function

End Class

.NET Reflectorによる逆アセンブルリスト §

.method public instance object test(string a, string b) cil managed

{

// Code Size: 22 byte(s)

.maxstack 3

.locals (object V_0)

L_0000: nop 

L_0001: ldarg.1 

L_0002: ldarg.2 

L_0003: ldc.i4.1 

L_0004: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StringType::StrCmp(string, string, bool)

L_0009: ldc.i4.0 

L_000a: ceq 

L_000c: box bool

L_0011: stloc.0 

L_0012: br.s L_0014

L_0014: ldloc.0 

L_0015: ret 

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2004年
05月
30日
実行時に動的にアセンブリを読み込んで、内部のメソッドを呼び出す
3days 0 count
total 6301 count
【技術雑記】の前のコンテンツ
2004年
05月
17日
本気で使えば可愛いところもあるXSLT&XPath?
3days 0 count
total 2636 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20040520114734
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.