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