Cache some property access in json hub protocol (#2128)

This commit is contained in:
BrennanConroy 2018-04-22 09:55:38 -07:00 committed by GitHub
parent 968e31970e
commit 33ee8626c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 9 deletions

View File

@ -585,14 +585,15 @@ namespace Microsoft.AspNetCore.SignalR.Protocol
object[] arguments = null; object[] arguments = null;
var paramIndex = 0; var paramIndex = 0;
var argumentsCount = 0; var argumentsCount = 0;
var paramCount = paramTypes.Count;
while (reader.Read()) while (reader.Read())
{ {
if (reader.TokenType == JsonToken.EndArray) if (reader.TokenType == JsonToken.EndArray)
{ {
if (argumentsCount != paramTypes.Count) if (argumentsCount != paramCount)
{ {
throw new InvalidDataException($"Invocation provides {argumentsCount} argument(s) but target expects {paramTypes.Count}."); throw new InvalidDataException($"Invocation provides {argumentsCount} argument(s) but target expects {paramCount}.");
} }
return arguments ?? Array.Empty<object>(); return arguments ?? Array.Empty<object>();
@ -600,12 +601,12 @@ namespace Microsoft.AspNetCore.SignalR.Protocol
if (arguments == null) if (arguments == null)
{ {
arguments = new object[paramTypes.Count]; arguments = new object[paramCount];
} }
try try
{ {
if (paramIndex < paramTypes.Count) if (paramIndex < paramCount)
{ {
// Set all known arguments // Set all known arguments
arguments[paramIndex] = PayloadSerializer.Deserialize(reader, paramTypes[paramIndex]); arguments[paramIndex] = PayloadSerializer.Deserialize(reader, paramTypes[paramIndex]);
@ -637,21 +638,23 @@ namespace Microsoft.AspNetCore.SignalR.Protocol
private object[] BindArguments(JArray args, IReadOnlyList<Type> paramTypes) private object[] BindArguments(JArray args, IReadOnlyList<Type> paramTypes)
{ {
if (paramTypes.Count != args.Count) var paramCount = paramTypes.Count;
var argCount = args.Count;
if (paramCount != argCount)
{ {
throw new InvalidDataException($"Invocation provides {args.Count} argument(s) but target expects {paramTypes.Count}."); throw new InvalidDataException($"Invocation provides {argCount} argument(s) but target expects {paramCount}.");
} }
if (paramTypes.Count == 0) if (paramCount == 0)
{ {
return Array.Empty<object>(); return Array.Empty<object>();
} }
var arguments = new object[args.Count]; var arguments = new object[argCount];
try try
{ {
for (var i = 0; i < paramTypes.Count; i++) for (var i = 0; i < paramCount; i++)
{ {
var paramType = paramTypes[i]; var paramType = paramTypes[i];
arguments[i] = args[i].ToObject(paramType, PayloadSerializer); arguments[i] = args[i].ToObject(paramType, PayloadSerializer);