Small performance improvements for TINKERPOP-1752
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1bfca40d Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1bfca40d Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1bfca40d Branch: refs/heads/master Commit: 1bfca40d1502f2d44108b1e2dacbe08acc182fd2 Parents: b8a278c Author: florianhockmann <[email protected]> Authored: Wed Oct 4 18:05:13 2017 +0200 Committer: florianhockmann <[email protected]> Committed: Wed Oct 4 18:05:13 2017 +0200 ---------------------------------------------------------------------- gremlin-dotnet/glv/GraphTraversal.template | 2 +- .../glv/GraphTraversalSource.template | 4 +- .../Gremlin.Net/Process/Traversal/Bindings.cs | 3 +- .../Process/Traversal/GraphTraversal.cs | 74 ++++++++++---------- .../Process/Traversal/GraphTraversalSource.cs | 10 +-- 5 files changed, 47 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bfca40d/gremlin-dotnet/glv/GraphTraversal.template ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/GraphTraversal.template b/gremlin-dotnet/glv/GraphTraversal.template index 8d88fcb..c7c6658 100644 --- a/gremlin-dotnet/glv/GraphTraversal.template +++ b/gremlin-dotnet/glv/GraphTraversal.template @@ -68,7 +68,7 @@ namespace Gremlin.Net.Process.Traversal public GraphTraversal< <%= method.t1 %> , <%= method.t2 %> > <%= toCSharpMethodName.call(method.methodName) %><%= method.tParam %> (<%= method.parameters %>) { <% if (method.parameters.contains("params ")) { - %> var args = new List<object> {<%= method.paramNames.init().join(", ") %>}; + %> var args = new List<object>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; args.AddRange(<%= method.paramNames.last() %>); Bytecode.AddStep("<%= method.methodName %>", args.ToArray());<% } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bfca40d/gremlin-dotnet/glv/GraphTraversalSource.template ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/GraphTraversalSource.template b/gremlin-dotnet/glv/GraphTraversalSource.template index b67dfd7..b99397c 100644 --- a/gremlin-dotnet/glv/GraphTraversalSource.template +++ b/gremlin-dotnet/glv/GraphTraversalSource.template @@ -77,7 +77,7 @@ namespace Gremlin.Net.Process.Traversal var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies), new Bytecode(Bytecode)); <% if (method.parameters.contains("params ")) { - %>var args = new List<object> {<%= method.paramNames.init().join(", ") %>}; + %>var args = new List<object>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; args.AddRange(<%= method.paramNames.last() %>); source.Bytecode.AddSource("<%= method.methodName %>", args.ToArray());<% } @@ -131,7 +131,7 @@ namespace Gremlin.Net.Process.Traversal { var traversal = new GraphTraversal< <%= method.typeArguments.join(",") %> >(TraversalStrategies, new Bytecode(Bytecode)); <% if (method.parameters.contains("params ")) { - %>var args = new List<object> {<%= method.paramNames.init().join(", ") %>}; + %>var args = new List<object>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; args.AddRange(<%= method.paramNames.last() %>); traversal.Bytecode.AddStep("<%= method.methodName %>", args.ToArray());<% } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bfca40d/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs index 2aa532b..a6e13b9 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs @@ -62,7 +62,8 @@ namespace Gremlin.Net.Process.Traversal var dict = BoundVariableByValue.Value; if (dict == null) return null; - return !dict.ContainsKey(value) ? null : dict[value]; + dict.TryGetValue(value, out var variable); + return variable; } internal static void Clear() http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bfca40d/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs index d74ee78..601e381 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs @@ -67,7 +67,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Vertex > V (params object[] vertexIdsOrElements) { - var args = new List<object> {}; + var args = new List<object>(0 + vertexIdsOrElements.Length) {}; args.AddRange(vertexIdsOrElements); Bytecode.AddStep("V", args.ToArray()); return Wrap< S , Vertex >(this); @@ -78,7 +78,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > AddE (Direction direction, string firstVertexKeyOrEdgeLabel, string edgeLabelOrSecondVertexKey, params object[] propertyKeyValues) { - var args = new List<object> {direction, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey}; + var args = new List<object>(3 + propertyKeyValues.Length) {direction, firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey}; args.AddRange(propertyKeyValues); Bytecode.AddStep("addE", args.ToArray()); return Wrap< S , Edge >(this); @@ -98,7 +98,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > AddInE (string firstVertexKeyOrEdgeLabel, string edgeLabelOrSecondVertexKey, params object[] propertyKeyValues) { - var args = new List<object> {firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey}; + var args = new List<object>(2 + propertyKeyValues.Length) {firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey}; args.AddRange(propertyKeyValues); Bytecode.AddStep("addInE", args.ToArray()); return Wrap< S , Edge >(this); @@ -109,7 +109,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > AddOutE (string firstVertexKeyOrEdgeLabel, string edgeLabelOrSecondVertexKey, params object[] propertyKeyValues) { - var args = new List<object> {firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey}; + var args = new List<object>(2 + propertyKeyValues.Length) {firstVertexKeyOrEdgeLabel, edgeLabelOrSecondVertexKey}; args.AddRange(propertyKeyValues); Bytecode.AddStep("addOutE", args.ToArray()); return Wrap< S , Edge >(this); @@ -129,7 +129,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Vertex > AddV (params object[] propertyKeyValues) { - var args = new List<object> {}; + var args = new List<object>(0 + propertyKeyValues.Length) {}; args.AddRange(propertyKeyValues); Bytecode.AddStep("addV", args.ToArray()); return Wrap< S , Vertex >(this); @@ -158,7 +158,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > And (params ITraversal[] andTraversals) { - var args = new List<object> {}; + var args = new List<object>(0 + andTraversals.Length) {}; args.AddRange(andTraversals); Bytecode.AddStep("and", args.ToArray()); return Wrap< S , E >(this); @@ -169,7 +169,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > As (string stepLabel, params string[] stepLabels) { - var args = new List<object> {stepLabel}; + var args = new List<object>(1 + stepLabels.Length) {stepLabel}; args.AddRange(stepLabels); Bytecode.AddStep("as", args.ToArray()); return Wrap< S , E >(this); @@ -207,7 +207,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Vertex > Both (params string[] edgeLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + edgeLabels.Length) {}; args.AddRange(edgeLabels); Bytecode.AddStep("both", args.ToArray()); return Wrap< S , Vertex >(this); @@ -218,7 +218,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > BothE (params string[] edgeLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + edgeLabels.Length) {}; args.AddRange(edgeLabels); Bytecode.AddStep("bothE", args.ToArray()); return Wrap< S , Edge >(this); @@ -337,7 +337,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E2 > Cap<E2> (string sideEffectKey, params string[] sideEffectKeys) { - var args = new List<object> {sideEffectKey}; + var args = new List<object>(1 + sideEffectKeys.Length) {sideEffectKey}; args.AddRange(sideEffectKeys); Bytecode.AddStep("cap", args.ToArray()); return Wrap< S , E2 >(this); @@ -402,7 +402,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E2 > Coalesce<E2> (params ITraversal[] coalesceTraversals) { - var args = new List<object> {}; + var args = new List<object>(0 + coalesceTraversals.Length) {}; args.AddRange(coalesceTraversals); Bytecode.AddStep("coalesce", args.ToArray()); return Wrap< S , E2 >(this); @@ -458,7 +458,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > Dedup (Scope scope, params string[] dedupLabels) { - var args = new List<object> {scope}; + var args = new List<object>(1 + dedupLabels.Length) {scope}; args.AddRange(dedupLabels); Bytecode.AddStep("dedup", args.ToArray()); return Wrap< S , E >(this); @@ -469,7 +469,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > Dedup (params string[] dedupLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + dedupLabels.Length) {}; args.AddRange(dedupLabels); Bytecode.AddStep("dedup", args.ToArray()); return Wrap< S , E >(this); @@ -723,7 +723,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > HasId (object id, params object[] otherIds) { - var args = new List<object> {id}; + var args = new List<object>(1 + otherIds.Length) {id}; args.AddRange(otherIds); Bytecode.AddStep("hasId", args.ToArray()); return Wrap< S , E >(this); @@ -752,7 +752,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > HasKey (string label, params string[] otherLabels) { - var args = new List<object> {label}; + var args = new List<object>(1 + otherLabels.Length) {label}; args.AddRange(otherLabels); Bytecode.AddStep("hasKey", args.ToArray()); return Wrap< S , E >(this); @@ -772,7 +772,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > HasLabel (string label, params string[] otherLabels) { - var args = new List<object> {label}; + var args = new List<object>(1 + otherLabels.Length) {label}; args.AddRange(otherLabels); Bytecode.AddStep("hasLabel", args.ToArray()); return Wrap< S , E >(this); @@ -792,7 +792,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > HasValue (object value, params object[] otherValues) { - var args = new List<object> {value}; + var args = new List<object>(1 + otherValues.Length) {value}; args.AddRange(otherValues); Bytecode.AddStep("hasValue", args.ToArray()); return Wrap< S , E >(this); @@ -830,7 +830,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Vertex > In (params string[] edgeLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + edgeLabels.Length) {}; args.AddRange(edgeLabels); Bytecode.AddStep("in", args.ToArray()); return Wrap< S , Vertex >(this); @@ -841,7 +841,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > InE (params string[] edgeLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + edgeLabels.Length) {}; args.AddRange(edgeLabels); Bytecode.AddStep("inE", args.ToArray()); return Wrap< S , Edge >(this); @@ -861,7 +861,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > Inject (params object[] injections) { - var args = new List<object> {}; + var args = new List<object>(0 + injections.Length) {}; args.AddRange(injections); Bytecode.AddStep("inject", args.ToArray()); return Wrap< S , E >(this); @@ -980,7 +980,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > Match<E2> (params ITraversal[] matchTraversals) { - var args = new List<object> {}; + var args = new List<object>(0 + matchTraversals.Length) {}; args.AddRange(matchTraversals); Bytecode.AddStep("match", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1081,7 +1081,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > Or (params ITraversal[] orTraversals) { - var args = new List<object> {}; + var args = new List<object>(0 + orTraversals.Length) {}; args.AddRange(orTraversals); Bytecode.AddStep("or", args.ToArray()); return Wrap< S , E >(this); @@ -1119,7 +1119,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Vertex > Out (params string[] edgeLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + edgeLabels.Length) {}; args.AddRange(edgeLabels); Bytecode.AddStep("out", args.ToArray()); return Wrap< S , Vertex >(this); @@ -1130,7 +1130,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > OutE (params string[] edgeLabels) { - var args = new List<object> {}; + var args = new List<object>(0 + edgeLabels.Length) {}; args.AddRange(edgeLabels); Bytecode.AddStep("outE", args.ToArray()); return Wrap< S , Edge >(this); @@ -1213,7 +1213,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > Project<E2> (string projectKey, params string[] otherProjectKeys) { - var args = new List<object> {projectKey}; + var args = new List<object>(1 + otherProjectKeys.Length) {projectKey}; args.AddRange(otherProjectKeys); Bytecode.AddStep("project", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1224,7 +1224,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E2 > Properties<E2> (params string[] propertyKeys) { - var args = new List<object> {}; + var args = new List<object>(0 + propertyKeys.Length) {}; args.AddRange(propertyKeys); Bytecode.AddStep("properties", args.ToArray()); return Wrap< S , E2 >(this); @@ -1235,7 +1235,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > Property (Cardinality cardinality, object key, object value, params object[] keyValues) { - var args = new List<object> {cardinality, key, value}; + var args = new List<object>(3 + keyValues.Length) {cardinality, key, value}; args.AddRange(keyValues); Bytecode.AddStep("property", args.ToArray()); return Wrap< S , E >(this); @@ -1246,7 +1246,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E > Property (object key, object value, params object[] keyValues) { - var args = new List<object> {key, value}; + var args = new List<object>(2 + keyValues.Length) {key, value}; args.AddRange(keyValues); Bytecode.AddStep("property", args.ToArray()); return Wrap< S , E >(this); @@ -1257,7 +1257,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > PropertyMap<E2> (params string[] propertyKeys) { - var args = new List<object> {}; + var args = new List<object>(0 + propertyKeys.Length) {}; args.AddRange(propertyKeys); Bytecode.AddStep("propertyMap", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1358,7 +1358,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > Select<E2> (Pop pop, string selectKey1, string selectKey2, params string[] otherSelectKeys) { - var args = new List<object> {pop, selectKey1, selectKey2}; + var args = new List<object>(3 + otherSelectKeys.Length) {pop, selectKey1, selectKey2}; args.AddRange(otherSelectKeys); Bytecode.AddStep("select", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1378,7 +1378,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > Select<E2> (string selectKey1, string selectKey2, params string[] otherSelectKeys) { - var args = new List<object> {selectKey1, selectKey2}; + var args = new List<object>(2 + otherSelectKeys.Length) {selectKey1, selectKey2}; args.AddRange(otherSelectKeys); Bytecode.AddStep("select", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1506,7 +1506,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Vertex > To (Direction direction, params string[] edgeLabels) { - var args = new List<object> {direction}; + var args = new List<object>(1 + edgeLabels.Length) {direction}; args.AddRange(edgeLabels); Bytecode.AddStep("to", args.ToArray()); return Wrap< S , Vertex >(this); @@ -1535,7 +1535,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , Edge > ToE (Direction direction, params string[] edgeLabels) { - var args = new List<object> {direction}; + var args = new List<object>(1 + edgeLabels.Length) {direction}; args.AddRange(edgeLabels); Bytecode.AddStep("toE", args.ToArray()); return Wrap< S , Edge >(this); @@ -1582,7 +1582,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E2 > Union<E2> (params ITraversal[] unionTraversals) { - var args = new List<object> {}; + var args = new List<object>(0 + unionTraversals.Length) {}; args.AddRange(unionTraversals); Bytecode.AddStep("union", args.ToArray()); return Wrap< S , E2 >(this); @@ -1620,7 +1620,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > ValueMap<E2> (params string[] propertyKeys) { - var args = new List<object> {}; + var args = new List<object>(0 + propertyKeys.Length) {}; args.AddRange(propertyKeys); Bytecode.AddStep("valueMap", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1631,7 +1631,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , IDictionary<string, E2> > ValueMap<E2> (bool includeTokens, params string[] propertyKeys) { - var args = new List<object> {includeTokens}; + var args = new List<object>(1 + propertyKeys.Length) {includeTokens}; args.AddRange(propertyKeys); Bytecode.AddStep("valueMap", args.ToArray()); return Wrap< S , IDictionary<string, E2> >(this); @@ -1642,7 +1642,7 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal< S , E2 > Values<E2> (params string[] propertyKeys) { - var args = new List<object> {}; + var args = new List<object>(0 + propertyKeys.Length) {}; args.AddRange(propertyKeys); Bytecode.AddStep("values", args.ToArray()); return Wrap< S , E2 >(this); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1bfca40d/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs index 40be304..36fde7c 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs @@ -132,7 +132,7 @@ namespace Gremlin.Net.Process.Traversal { var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies), new Bytecode(Bytecode)); - var args = new List<object> {}; + var args = new List<object>(0 + traversalStrategies.Length) {}; args.AddRange(traversalStrategies); source.Bytecode.AddSource("withStrategies", args.ToArray()); return source; @@ -142,7 +142,7 @@ namespace Gremlin.Net.Process.Traversal { var source = new GraphTraversalSource(new List<ITraversalStrategy>(TraversalStrategies), new Bytecode(Bytecode)); - var args = new List<object> {}; + var args = new List<object>(0 + traversalStrategyClasses.Length) {}; args.AddRange(traversalStrategyClasses); source.Bytecode.AddSource("withoutStrategies", args.ToArray()); return source; @@ -190,7 +190,7 @@ namespace Gremlin.Net.Process.Traversal public GraphTraversal< Edge,Edge > E(params object[] edgesIds) { var traversal = new GraphTraversal< Edge,Edge >(TraversalStrategies, new Bytecode(Bytecode)); - var args = new List<object> {}; + var args = new List<object>(0 + edgesIds.Length) {}; args.AddRange(edgesIds); traversal.Bytecode.AddStep("E", args.ToArray()); return traversal; @@ -203,7 +203,7 @@ namespace Gremlin.Net.Process.Traversal public GraphTraversal< Vertex,Vertex > V(params object[] vertexIds) { var traversal = new GraphTraversal< Vertex,Vertex >(TraversalStrategies, new Bytecode(Bytecode)); - var args = new List<object> {}; + var args = new List<object>(0 + vertexIds.Length) {}; args.AddRange(vertexIds); traversal.Bytecode.AddStep("V", args.ToArray()); return traversal; @@ -227,7 +227,7 @@ namespace Gremlin.Net.Process.Traversal public GraphTraversal< Vertex,Vertex > AddV(params object[] keyValues) { var traversal = new GraphTraversal< Vertex,Vertex >(TraversalStrategies, new Bytecode(Bytecode)); - var args = new List<object> {}; + var args = new List<object>(0 + keyValues.Length) {}; args.AddRange(keyValues); traversal.Bytecode.AddStep("addV", args.ToArray()); return traversal;
