我有问题,这样的:GC的Alloc由于未知原因,
它是在50元话费(screen)分配2 KB。这怎么可能?这种方法的哪一部分是分配内存? (在此屏幕上的SAN看到Stream.WriteObject(args[i]);
被分配9.4使2KB由WriteArgs
本身分配)
我有问题,这样的:GC的Alloc由于未知原因,
它是在50元话费(screen)分配2 KB。这怎么可能?这种方法的哪一部分是分配内存? (在此屏幕上的SAN看到Stream.WriteObject(args[i]);
被分配9.4使2KB由WriteArgs
本身分配)
一个很大的嫌疑是在你的object[] args
参数object
。这看起来像是一个装箱和拆箱问题。
当您调用WriteArgs
函数并传递一些信息时,它会执行装箱将该参数转换为object
。
不知道什么Stream.WriteObject
是或者说你有,但如果它需要object
作为参数也是一样,当它的WriteArgs
功能进入里面,它还会以使用传递的变量进行拆箱到它。 拳击和拆箱分配内存。
FIX:
删除object[] args
,并为您的WriteArgs
功能,可以处理不同类型的对象作为参数多个重载。
另外,如果您为它编写了代码或找到替代函数,请执行Stream.WriteObject
。你可以阅读更多关于拳击和拆箱here。
编辑:
拳击以上仅适用于Value Types描述拆箱问题。如果您已经将Reference Type传递给该函数,那么这里唯一的问题是Stream.WriteObject
函数。
只有当所讨论的对象是值类型时才会进行装箱和取消装箱。 – Servy
@Servy是的,但我们不知道传递给该函数的是什么.OP没有在问题中显示。 – Programmer
然而你说,价值是*永远*盒装,和*永远*拆箱,这是完全错误的。如果您觉得该问题没有足够的信息发布正确的答案,那么*不要发布答案*直到问题能够被澄清到足以应付。 – Servy
那么你正在使用'Stream'这是一个非托管资源 – Rahul
Stream是什么类型? – Polyfun
你为什么要关心2KB?你是否在内存受限的环境中运行? – mjwills