王玲星 发表于 2012-6-30 15:50
是这样的吗? 不是using才出了大括号释放的,while也具有这个功能?
你是对的 。。唉 我想错了。。好好的去查了下资料 又尝试IL反编译 好像确实是没有释放资源。。
这是一个WHILE循环定义一个整形变量i 并赋值10 的IL代码 自己也不是很懂.。- .method private hidebysig static void Main(string[] args) cil managed
- {
- .entrypoint
- // 代码大小 19 (0x13)
- .maxstack 1
- .locals init ([0] int32 xx,
- [1] bool CS$4$0000)
- IL_0000: nop //如果修补操作码,则填充空间。尽管可能消耗处理周期,但未执行任何有意义的操作。
- IL_0001: br.s IL_000f //无条件地将控制转移到目标指令。
- IL_0003: nop
- IL_0004: ldc.i4.s 10 //将整数值 10作为 int32 推送到计算堆栈上。
- IL_0006: stloc.0 //从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。
- IL_0007: ldloc.0 //将索引 0 处的局部变量加载到计算堆栈上。//将索引 0 处的局部变量加载到计算堆栈上。
- //调用由传递的方法说明符指示的方法
- IL_0008: call void [mscorlib]System.Console::WriteLine(int32)
- IL_000d: nop
- IL_000e: nop
- IL_000f: ldc.i4.1
- IL_0010: stloc.1 //从计算堆栈的顶部弹出当前值并将其存储到索引 1 处的局部变量列表中。
- IL_0011: br.s IL_0003
- } // end of method Program::Main
复制代码 |