<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>VB.NET</title><link>http://blogs.wankuma.com/mrt/category/1970.aspx</link><description>VB.NET</description><managingEditor>Mr.T</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Mr.T</dc:creator><title>[VB.NET]隠れたCOSTという話</title><link>http://blogs.wankuma.com/mrt/archive/2009/10/07/181942.aspx</link><pubDate>Wed, 07 Oct 2009 11:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2009/10/07/181942.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/181942.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2009/10/07/181942.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/181942.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/181942.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;元ネタは、&lt;a title="http://blogs.msdn.com/vbteam/archive/2009/10/06/hidden-costs-matt-gertz.aspx" href="http://blogs.msdn.com/vbteam/archive/2009/10/06/hidden-costs-matt-gertz.aspx"&gt;http://blogs.msdn.com/vbteam/archive/2009/10/06/hidden-costs-matt-gertz.aspx&lt;/a&gt;&lt;br&gt;# ほとんど、ネタに乗っかるだけの話なんで恐縮なんですけどね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;VB6.0以前でも云われてきた話じゃないかと思ってたんですが、ループなどで、こういう処理を書いたとします。&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; MyList.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Append(MyList(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;このとき、MyList.Countは、ループのたびに評価される、というのが隠れたCostということみたいです。&lt;/p&gt; &lt;p&gt;で、ほんじゃどんだけ違うのだろうと、MSILコードを見るとこんな感じでした。&lt;/p&gt; &lt;p&gt;#Costがあるってなら、何か余計な処理&amp;amp;時間がかかる処理があるんだろうと思うので。  &lt;p&gt;&amp;nbsp; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 (0x30)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0007:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_000c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Count()&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; IL_0011:&amp;nbsp; stloc.2（※１）&lt;/font&gt;&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002b&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0016:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_001b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_001c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance !0 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Item(int32)&lt;br&gt;&amp;nbsp; IL_0021:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)&lt;br&gt;&amp;nbsp; IL_0026:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0027:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MyList.Coutを事前に求めておいたパターンで同じようにやってみました。&lt;/p&gt; &lt;div class="SourceBox"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; count &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = MyList.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Append(MyList(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50 (0x32)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] int32 count,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_000b:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Count()&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;nbsp; IL_0010:&amp;nbsp; stloc.0（※２）&lt;/font&gt;&lt;br&gt;&amp;nbsp; IL_0011:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; stloc.3&lt;br&gt;&amp;nbsp; IL_0014:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002d&lt;br&gt;&amp;nbsp; IL_0017:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0018:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp; IL_001d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_001e:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance !0 class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::get_Item(int32)&lt;br&gt;&amp;nbsp; IL_0023:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002e:&amp;nbsp; ldloc.3&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0017&lt;br&gt;&amp;nbsp; IL_0031:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp; &lt;p&gt;よくわからんのだけど、この※１と※２は、Countの戻り値を評価スタックとやらにPushしてるわけで、この値を比較対象と&lt;br&gt;してるんだと思ってるんですが、違うんですかね？  &lt;p&gt;この時点では、もうどちらもint32の値として利用されているから、Costなんてなさそうな感じがします。  &lt;p&gt;前段では、  &lt;p&gt;&amp;nbsp; IL_002d:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015  &lt;p&gt;後段では、  &lt;p&gt;&amp;nbsp; IL_002f:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0017  &lt;p&gt;&amp;nbsp; &lt;p&gt;ここで、ループというか指定行に飛んでいくようになってます。つまり、これを見る限りは、Appendは毎回評価されている  &lt;p&gt;けど、Countは毎回なんぞ評価されていないように見えます。  &lt;p&gt;&amp;nbsp; &lt;p&gt;じゃあ、For Each使えばどうなのよ、ってことで、  &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;) = &lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; data &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;In&lt;/font&gt; MyList&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Append(data)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&amp;nbsp; &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 61 (0x3d)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 2&lt;br&gt;&amp;nbsp; .locals init ([0] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] string data,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt; VB$t_struct$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; .try&lt;br&gt;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0006:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt; Sample.Module1::MyList&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_000b:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;!0&amp;gt; class [mscorlib]System.Collections.Generic.List`1&amp;lt;string&amp;gt;::GetEnumerator()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0010:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0011:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0023&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0013:&amp;nbsp; ldloca.s&amp;nbsp;&amp;nbsp; VB$t_struct$L0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015:&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance !0 valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt;::get_Current()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001a:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001b:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001c:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_001d:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0022:&amp;nbsp; pop&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0023:&amp;nbsp; ldloca.s&amp;nbsp;&amp;nbsp; VB$t_struct$L0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0025:&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance bool valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt;::MoveNext()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002a:&amp;nbsp; brtrue.s&amp;nbsp;&amp;nbsp; IL_0013&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002c:&amp;nbsp; leave.s&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_003c&lt;br&gt;&amp;nbsp; }&amp;nbsp; // end .try&lt;br&gt;&amp;nbsp; finally&lt;br&gt;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002e:&amp;nbsp; ldloca.s&amp;nbsp;&amp;nbsp; VB$t_struct$L0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0030:&amp;nbsp; constrained. valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator&amp;lt;string&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0036:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.IDisposable::Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_003b:&amp;nbsp; endfinally&lt;br&gt;&amp;nbsp; }&amp;nbsp; // end handler&lt;br&gt;&amp;nbsp; IL_003c:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;まあ、このヘンになってくると比較にもならん結果になるので、パスw&lt;br&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;で、引用元の人は、こういうのは最悪だろって話をしてるんだけど、  &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyLameObjectHeader &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;New&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; MyLameObjectHeader.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Append(MyLameObjectHeader.Item(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; data &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; NextMLO &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; Insert(&lt;font color="blue"&gt;ByVal&lt;/font&gt; mlo &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; NextMLO IsNot &lt;font color="blue"&gt;Nothing&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NextMLO = mlo&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Else&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mlo.NextMLO = NextMLO.NextMLO&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NextMLO.NextMLO = mlo&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Count() &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; ct &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; current &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;Me&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Do&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt; current IsNot &lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ct += &lt;font color="#c00040"&gt;1&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; current = current.NextMLO&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Loop&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt; ct&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt; Item(&lt;font color="blue"&gt;ByVal&lt;/font&gt; index &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt;) &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; index &amp;gt;= Count() &lt;font color="blue"&gt;OrElse&lt;/font&gt; index &amp;lt; &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Return&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Nothing&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; current &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;Me&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; index&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; current = current.NextMLO&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt; current&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Function&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Class&lt;/font&gt; &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MyLameObject.Countが毎回、ループで処理されるからひどいことになるよってことですな。せめてこうしろって話ですな。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="SourceBox"&gt;(Mainの変更後）  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; MyLameObjectHeader &lt;font color="blue"&gt;As&lt;/font&gt; MyLameObject = &lt;font color="blue"&gt;New&lt;/font&gt; MyLameObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; s &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; System.Text.StringBuilder&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; c &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = MyLameObjectHeader.Count&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt; = &lt;font color="#c00040"&gt;0&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt; c&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.Append(MyLameObjectHeader.Item(i))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;/p&gt;&lt;/div&gt; &lt;p&gt;--Main部分 変更前&lt;/p&gt; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 (0x30)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0007:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_000c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 Sample.Module1/MyLameObject::Count()&lt;br&gt;&amp;nbsp; IL_0011:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002b&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0016:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_001b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_001c:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class Sample.Module1/MyLameObject Sample.Module1/MyLameObject::Item(int32)&lt;br&gt;&amp;nbsp; IL_0021:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(object)&lt;br&gt;&amp;nbsp; IL_0026:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0027:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0015&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;--Main部分 変更後&lt;/p&gt; &lt;p&gt;.method public static void&amp;nbsp; Main() cil managed&lt;br&gt;{&lt;br&gt;&amp;nbsp; .entrypoint&lt;br&gt;&amp;nbsp; .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) &lt;br&gt;&amp;nbsp; // コード サイズ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50 (0x32)&lt;br&gt;&amp;nbsp; .maxstack&amp;nbsp; 3&lt;br&gt;&amp;nbsp; .locals init ([0] int32 c,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] class [mscorlib]System.Text.StringBuilder s,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2] int32 i,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3] int32 VB$t_i4$L0)&lt;br&gt;&amp;nbsp; IL_0000:&amp;nbsp; newobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance void [mscorlib]System.Text.StringBuilder::.ctor()&lt;br&gt;&amp;nbsp; IL_0005:&amp;nbsp; stloc.1&lt;br&gt;&amp;nbsp; IL_0006:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_000b:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance int32 Sample.Module1/MyLameObject::Count()&lt;br&gt;&amp;nbsp; IL_0010:&amp;nbsp; stloc.0&lt;br&gt;&amp;nbsp; IL_0011:&amp;nbsp; ldc.i4.0&lt;br&gt;&amp;nbsp; IL_0012:&amp;nbsp; ldloc.0&lt;br&gt;&amp;nbsp; IL_0013:&amp;nbsp; stloc.3&lt;br&gt;&amp;nbsp; IL_0014:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_0015:&amp;nbsp; br.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_002d&lt;br&gt;&amp;nbsp; IL_0017:&amp;nbsp; ldloc.1&lt;br&gt;&amp;nbsp; IL_0018:&amp;nbsp; ldsfld&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Sample.Module1/MyLameObject Sample.Module1::MyLameObjectHeader&lt;br&gt;&amp;nbsp; IL_001d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_001e:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class Sample.Module1/MyLameObject Sample.Module1/MyLameObject::Item(int32)&lt;br&gt;&amp;nbsp; IL_0023:&amp;nbsp; callvirt&amp;nbsp;&amp;nbsp; instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(object)&lt;br&gt;&amp;nbsp; IL_0028:&amp;nbsp; pop&lt;br&gt;&amp;nbsp; IL_0029:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002a:&amp;nbsp; ldc.i4.1&lt;br&gt;&amp;nbsp; IL_002b:&amp;nbsp; add.ovf&lt;br&gt;&amp;nbsp; IL_002c:&amp;nbsp; stloc.2&lt;br&gt;&amp;nbsp; IL_002d:&amp;nbsp; ldloc.2&lt;br&gt;&amp;nbsp; IL_002e:&amp;nbsp; ldloc.3&lt;br&gt;&amp;nbsp; IL_002f:&amp;nbsp; ble.s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IL_0017&lt;br&gt;&amp;nbsp; IL_0031:&amp;nbsp; ret&lt;br&gt;} // end of method Module1::Main  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;クラス部分は変更してないから、同じだし。&lt;/p&gt; &lt;p&gt;それ以外だと、やっぱりContの部分なんですが・・・これって、やっぱりループごとに評価されているわけじゃないように&lt;br&gt;見えるんですが・・・&lt;/p&gt; &lt;p&gt;サルでもわかる説明とかないですかねw&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/181942.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>HttpServerUtility.Executeではクエリパラメータが渡せる</title><link>http://blogs.wankuma.com/mrt/archive/2009/01/07/165826.aspx</link><pubDate>Wed, 07 Jan 2009 15:59:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2009/01/07/165826.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/165826.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2009/01/07/165826.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/165826.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/165826.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;レガシーのASPで、IIS5.0を使っていると、Server.Executeでページ遷移をすることがよくありましたが、&lt;/p&gt; &lt;p&gt;実はURLにクエリ文字列が含められなくて、非常に困っていました。&lt;/p&gt; &lt;p&gt;たとえば、&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Server.Execute("hogehoge.asp?UserCD='**'")&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;みたいなものですね。これは、エラーになります。&lt;/p&gt; &lt;p&gt;⇒IIS の Server.Execute パラメータにクエリ文字列を使用するとエラーが発生する ：&lt;a title="http://support.microsoft.com/kb/247420/ja" href="http://support.microsoft.com/kb/247420/ja"&gt;http://support.microsoft.com/kb/247420/ja&lt;/a&gt;&lt;/p&gt; &lt;p&gt;これは、仕様なのでどうしようもなかったのですね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ところが、ASP.NETになってから、Server.ExecuteメソッドはHttpServerutilityクラスになってくれて、少なくともASP2.0では&lt;/p&gt; &lt;p&gt;Server.Execute("hogehoge.aspx?UserCD='**'")&lt;/p&gt; &lt;p&gt;がきちんと通るし、hogehoge.aspxでも、UserCDを取得することができました。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;まあ、ASP.NETは別物なんだから、できるようになったといえばそれでオシマイなんですがねw&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/165826.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>