从文档中还不清楚HttpContent.ReadAsByteArrayAsync()是否采用内存中已有的内容并将内容复制到新的byte[]中,然后返回给使用者,或者它返回的byte[]是否有效地指向内存中已有内容的相同位置。
换句话说,有人能澄清是否有新的内存分配给返回的byte[]吗?
顺便说一句,我特别想问一下.NET 5。
发布于 2021-07-19 17:59:49
如果你反编译ReadAsByteArrayAsync方法,你会得到这样的结果:
private MemoryStream bufferedContent;
[global::__DynamicallyInvokable]
public Task<byte[]> ReadAsByteArrayAsync()
{
CheckDisposed();
TaskCompletionSource<byte[]> tcs = new TaskCompletionSource<byte[]>();
LoadIntoBufferAsync().ContinueWithStandard(delegate(Task task)
{
if (!HttpUtilities.HandleFaultsAndCancelation(task, tcs))
{
tcs.TrySetResult(bufferedContent.ToArray());
}
});
return tcs.Task;
}
[__DynamicallyInvokable]
public virtual byte[] ToArray()
{
byte[] array = new byte[_length - _origin];
Buffer.InternalBlockCopy(_buffer, _origin, array, 0, _length - _origin);
return array;
}.ToArray()调用明确地分配了新的内存。
https://stackoverflow.com/questions/68438500
复制相似问题