Fast header clear
This commit is contained in:
parent
f8aa1a676a
commit
b473402cb1
|
|
@ -266,20 +266,22 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
{
|
||||
if (_frameHeaders != null)
|
||||
{
|
||||
RequestHeaders = null;
|
||||
ResponseHeaders = null;
|
||||
var frameHeaders = _frameHeaders;
|
||||
_frameHeaders = null;
|
||||
|
||||
RequestHeaders = null;
|
||||
ResponseHeaders = null;
|
||||
HttpComponentFactory.DisposeHeaders(frameHeaders, poolingPermitted);
|
||||
}
|
||||
|
||||
if (_frameStreams != null)
|
||||
{
|
||||
var frameStreams = _frameStreams;
|
||||
_frameStreams = null;
|
||||
|
||||
RequestBody = null;
|
||||
ResponseBody = null;
|
||||
DuplexStream = null;
|
||||
var frameStreams = _frameStreams;
|
||||
_frameStreams = null;
|
||||
HttpComponentFactory.DisposeStreams(frameStreams, poolingPermitted);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -216,10 +216,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
: "")}
|
||||
|
||||
private long _bits = 0;
|
||||
{Each(loop.Headers, header => @"
|
||||
private StringValues _" + header.Identifier + ";")}
|
||||
{Each(loop.Headers.Where(header => header.EnhancedSetter), header => @"
|
||||
private byte[] _raw" + header.Identifier + ";")}
|
||||
private HeaderReferences _headers;
|
||||
{Each(loop.Headers, header => $@"
|
||||
public StringValues Header{header.Identifier}
|
||||
{{
|
||||
|
|
@ -227,23 +224,23 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
{{
|
||||
if ({header.TestBit()})
|
||||
{{
|
||||
return _{header.Identifier};
|
||||
return _headers._{header.Identifier};
|
||||
}}
|
||||
return StringValues.Empty;
|
||||
}}
|
||||
set
|
||||
{{
|
||||
{header.SetBit()};
|
||||
_{header.Identifier} = value; {(header.EnhancedSetter == false ? "" : $@"
|
||||
_raw{header.Identifier} = null;")}
|
||||
_headers._{header.Identifier} = value; {(header.EnhancedSetter == false ? "" : $@"
|
||||
_headers._raw{header.Identifier} = null;")}
|
||||
}}
|
||||
}}")}
|
||||
{Each(loop.Headers.Where(header => header.EnhancedSetter), header => $@"
|
||||
public void SetRaw{header.Identifier}(StringValues value, byte[] raw)
|
||||
{{
|
||||
{header.SetBit()};
|
||||
_{header.Identifier} = value;
|
||||
_raw{header.Identifier} = raw;
|
||||
_headers._{header.Identifier} = value;
|
||||
_headers._raw{header.Identifier} = raw;
|
||||
}}")}
|
||||
protected override int GetCountFast()
|
||||
{{
|
||||
|
|
@ -259,7 +256,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
{{
|
||||
if ({header.TestBit()})
|
||||
{{
|
||||
return _{header.Identifier};
|
||||
return _headers._{header.Identifier};
|
||||
}}
|
||||
else
|
||||
{{
|
||||
|
|
@ -285,7 +282,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
{{
|
||||
if ({header.TestBit()})
|
||||
{{
|
||||
value = _{header.Identifier};
|
||||
value = _headers._{header.Identifier};
|
||||
return true;
|
||||
}}
|
||||
else
|
||||
|
|
@ -309,8 +306,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
if (""{header.Name}"".Equals(key, StringComparison.OrdinalIgnoreCase))
|
||||
{{
|
||||
{header.SetBit()};
|
||||
_{header.Identifier} = value;{(header.EnhancedSetter == false ? "" : $@"
|
||||
_raw{header.Identifier} = null;")}
|
||||
_headers._{header.Identifier} = value;{(header.EnhancedSetter == false ? "" : $@"
|
||||
_headers._raw{header.Identifier} = null;")}
|
||||
return;
|
||||
}}
|
||||
")}}}
|
||||
|
|
@ -331,8 +328,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
ThrowDuplicateKeyException();
|
||||
}}
|
||||
{header.SetBit()};
|
||||
_{header.Identifier} = value;{(header.EnhancedSetter == false ? "" : $@"
|
||||
_raw{header.Identifier} = null;")}
|
||||
_headers._{header.Identifier} = value;{(header.EnhancedSetter == false ? "" : $@"
|
||||
_headers._raw{header.Identifier} = null;")}
|
||||
return;
|
||||
}}
|
||||
")}}}
|
||||
|
|
@ -351,8 +348,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
if ({header.TestBit()})
|
||||
{{
|
||||
{header.ClearBit()};
|
||||
_{header.Identifier} = StringValues.Empty;{(header.EnhancedSetter == false ? "" : $@"
|
||||
_raw{header.Identifier} = null;")}
|
||||
_headers._{header.Identifier} = StringValues.Empty;{(header.EnhancedSetter == false ? "" : $@"
|
||||
_headers._raw{header.Identifier} = null;")}
|
||||
return true;
|
||||
}}
|
||||
else
|
||||
|
|
@ -366,10 +363,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
return MaybeUnknown?.Remove(key) ?? false;
|
||||
}}
|
||||
protected override void ClearFast()
|
||||
{{{(loop.ClassName != "FrameRequestHeaders" ? "" : Each(loop.Headers, header => $@"
|
||||
if ({header.TestBit()}) _{header.Identifier} = default(StringValues);"))}
|
||||
|
||||
{{
|
||||
_bits = 0;
|
||||
_headers = default(HeaderReferences);
|
||||
MaybeUnknown?.Clear();
|
||||
}}
|
||||
|
||||
|
|
@ -387,7 +383,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
ThrowArgumentException();
|
||||
}}
|
||||
|
||||
array[arrayIndex] = new KeyValuePair<string, StringValues>(""{header.Name}"", _{header.Identifier});
|
||||
array[arrayIndex] = new KeyValuePair<string, StringValues>(""{header.Name}"", _headers._{header.Identifier});
|
||||
++arrayIndex;
|
||||
}}
|
||||
")}
|
||||
|
|
@ -399,12 +395,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
{Each(loop.Headers, header => $@"
|
||||
if ({header.TestBit()})
|
||||
{{ {(header.EnhancedSetter == false ? "" : $@"
|
||||
if (_raw{header.Identifier} != null)
|
||||
if (_headers._raw{header.Identifier} != null)
|
||||
{{
|
||||
output.CopyFrom(_raw{header.Identifier}, 0, _raw{header.Identifier}.Length);
|
||||
output.CopyFrom(_headers._raw{header.Identifier}, 0, _headers._raw{header.Identifier}.Length);
|
||||
}}
|
||||
else ")}
|
||||
foreach (var value in _{header.Identifier})
|
||||
foreach (var value in _headers._{header.Identifier})
|
||||
{{
|
||||
if (value != null)
|
||||
{{
|
||||
|
|
@ -432,13 +428,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
{{
|
||||
if ({header.TestBit()})
|
||||
{{
|
||||
_{header.Identifier} = AppendValue(_{header.Identifier}, value);
|
||||
_headers._{header.Identifier} = AppendValue(_headers._{header.Identifier}, value);
|
||||
}}
|
||||
else
|
||||
{{
|
||||
{header.SetBit()};
|
||||
_{header.Identifier} = new StringValues(value);{(header.EnhancedSetter == false ? "" : $@"
|
||||
_raw{header.Identifier} = null;")}
|
||||
_headers._{header.Identifier} = new StringValues(value);{(header.EnhancedSetter == false ? "" : $@"
|
||||
_headers._raw{header.Identifier} = null;")}
|
||||
}}
|
||||
return;
|
||||
}}
|
||||
|
|
@ -451,6 +447,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
Unknown.TryGetValue(key, out existing);
|
||||
Unknown[key] = AppendValue(existing, value);
|
||||
}}" : "")}
|
||||
private struct HeaderReferences
|
||||
{{{Each(loop.Headers, header => @"
|
||||
public StringValues _" + header.Identifier + ";")}
|
||||
{Each(loop.Headers.Where(header => header.EnhancedSetter), header => @"
|
||||
public byte[] _raw" + header.Identifier + ";")}
|
||||
}}
|
||||
|
||||
public partial struct Enumerator
|
||||
{{
|
||||
public bool MoveNext()
|
||||
|
|
@ -468,7 +471,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
|||
state{header.Index}:
|
||||
if ({header.TestBit()})
|
||||
{{
|
||||
_current = new KeyValuePair<string, StringValues>(""{header.Name}"", _collection._{header.Identifier});
|
||||
_current = new KeyValuePair<string, StringValues>(""{header.Name}"", _collection._headers._{header.Identifier});
|
||||
_state = {header.Index + 1};
|
||||
return true;
|
||||
}}
|
||||
|
|
|
|||
Loading…
Reference in New Issue