黑马程序员技术交流社区

标题: 有木有把一个 byte[]数组直接清空的方法啊(系统自带的) [打印本页]

作者: 王玲星    时间: 2012-6-26 23:09
标题: 有木有把一个 byte[]数组直接清空的方法啊(系统自带的)
Scoket中实现服务端向客户端发送数据,客户端接受数据,如果每次客户端接受数据时都创建一个2M的字节数组,多浪费空间那~~
所以有木有一个可以直接清空的字节数组的方法(系统自带啊!如果自己写的话,如非必要,我也懒的写,在折腾我和折腾计算机之间,我选择折腾计算机),其实我有稍微翻了下~~~  太多了,眼都花了,哪位大神晓得的话直接告诉我哈!
作者: 朱灿    时间: 2012-6-26 23:15
Array.Clear 方法 试试看这个方法
将 Array 中的一系列元素设置为零、false 或 null,具体取决于元素类型
作者: 王玲星    时间: 2012-6-28 22:33
朱灿 发表于 2012-6-26 23:15
Array.Clear 方法 试试看这个方法
将 Array 中的一系列元素设置为零、false 或 null,具体取决于元素类型 ...

可他是个数组啊,还是得一个一个弄吧?
作者: 赵力    时间: 2012-6-30 00:30
我觉得 没必要吧。
byte[] arrMsgRec = new byte[1024 * 1024];  在while循环中,每次循环都会重新NEW一个数组arrMsgRec 原来的应该被直接释放掉了吧?
作者: 王玲星    时间: 2012-6-30 15:50
赵力 发表于 2012-6-30 00:30
我觉得 没必要吧。
byte[] arrMsgRec = new byte[1024 * 1024];  在while循环中,每次循环都会重新NEW一个 ...

是这样的吗?  不是using才出了大括号释放的,while也具有这个功能?
作者: 赵力    时间: 2012-6-30 19:50
王玲星 发表于 2012-6-30 15:50
是这样的吗?  不是using才出了大括号释放的,while也具有这个功能?

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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2