我有这个问题:
visibleObject.visibleCallableSub (aCustomCollection), False
它在50个电话(screen)上分配2 KB。怎么可能?这种方法的哪一部分是分配内存? (在此屏幕上,您可以看到 public void WriteArgs(object[] args)
{
for (var i = 0; i < args.Length; i++)
{
Stream.WriteObject(args[i]);
}
}
正在分配9.4,因此2KB由Stream.WriteObject(args[i]);
本身分配)
答案 0 :(得分:1)
一个很大的疑问是object
参数中的object[] args
。这看起来像拳击和拆箱问题。
当您调用WriteArgs
函数并向其传递内容时,它会执行装箱以将该参数转换为object
。
不确定Stream.WriteObject
是什么或者你得到了什么,但如果它也是object
作为参数,当它进入WriteArgs
函数时,它也会执行取消装箱以便使用传递给它的变量。 拳击和取消装箱都会分配内存。
<强> FIX 强>:
删除object[] args
并为您的WriteArgs
函数创建多个重载,这些重载可以处理不同的Object类型作为参数。
另外,如果您编写它或为其找到替代函数,请对Stream.WriteObject
执行相同操作。您可以详细了解拳击和取消装箱 here。
修改强>
上述装箱和拆箱问题仅适用于Value Types。如果您已将Reference Type传递给该函数,则此处唯一的问题是Stream.WriteObject
函数。