Skip to content

Commit 5ee4401

Browse files
bahusoidhazzik
authored andcommitted
Optimize ToArray conversions
1 parent d0aecf2 commit 5ee4401

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+315
-218
lines changed

src/NHibernate/Async/Cache/NonstrictReadWriteCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public async Task<object[]> GetManyAsync(CacheKey[] keys, long timestamp, Cancel
5050
{
5151
log.Debug("Cache lookup: {0}", string.Join(",", keys.AsEnumerable()));
5252
}
53-
var results = await (_cache.GetManyAsync(keys.Select(o => (object) o).ToArray(), cancellationToken)).ConfigureAwait(false);
53+
var results = await (_cache.GetManyAsync(keys, cancellationToken)).ConfigureAwait(false);
5454
if (!log.IsDebugEnabled())
5555
{
5656
return results;

src/NHibernate/Async/Cache/ReadOnlyCache.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public async Task<object[]> GetManyAsync(CacheKey[] keys, long timestamp, Cancel
3939
{
4040
log.Debug("Cache lookup: {0}", string.Join(",", keys.AsEnumerable()));
4141
}
42-
var results = await (_cache.GetManyAsync(keys.Select(o => (object) o).ToArray(), cancellationToken)).ConfigureAwait(false);
42+
var results = await (_cache.GetManyAsync(keys, cancellationToken)).ConfigureAwait(false);
4343
if (!log.IsDebugEnabled())
4444
{
4545
return results;
@@ -95,7 +95,7 @@ public async Task<bool[]> PutManyAsync(
9595
var skipKeyIndexes = new HashSet<int>();
9696
if (checkKeys.Any())
9797
{
98-
var objects = await (_cache.GetManyAsync(checkKeys.Select(o => (object) o).ToArray(), cancellationToken)).ConfigureAwait(false);
98+
var objects = await (_cache.GetManyAsync(checkKeys.ToArray(), cancellationToken)).ConfigureAwait(false);
9999
for (var i = 0; i < objects.Length; i++)
100100
{
101101
if (objects[i] != null)

src/NHibernate/Async/Cache/ReadWriteCache.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public async Task<object[]> GetManyAsync(CacheKey[] keys, long timestamp, Cancel
9999
var result = new object[keys.Length];
100100
using (await _lockObjectAsync.LockAsync())
101101
{
102-
var lockables = await (_cache.GetManyAsync(keys.Select(o => (object) o).ToArray(), cancellationToken)).ConfigureAwait(false);
102+
var lockables = await (_cache.GetManyAsync(keys, cancellationToken)).ConfigureAwait(false);
103103
for (var i = 0; i < lockables.Length; i++)
104104
{
105105
var lockable = (ILockable) lockables[i];
@@ -185,12 +185,12 @@ public async Task<bool[]> PutManyAsync(
185185
{
186186
log.Debug("Caching: {0}", string.Join(",", keys.AsEnumerable()));
187187
}
188-
var keysArr = keys.Cast<object>().ToArray();
189-
var lockValue = await (_cache.LockManyAsync(keysArr, cancellationToken)).ConfigureAwait(false);
188+
189+
var lockValue = await (_cache.LockManyAsync(keys, cancellationToken)).ConfigureAwait(false);
190190
try
191191
{
192192
var putBatch = new Dictionary<object, object>();
193-
var lockables = await (_cache.GetManyAsync(keysArr, cancellationToken)).ConfigureAwait(false);
193+
var lockables = await (_cache.GetManyAsync(keys, cancellationToken)).ConfigureAwait(false);
194194
for (var i = 0; i < keys.Length; i++)
195195
{
196196
var key = keys[i];
@@ -231,7 +231,7 @@ public async Task<bool[]> PutManyAsync(
231231
}
232232
finally
233233
{
234-
await (_cache.UnlockManyAsync(keysArr, lockValue, cancellationToken)).ConfigureAwait(false);
234+
await (_cache.UnlockManyAsync(keys, lockValue, cancellationToken)).ConfigureAwait(false);
235235
}
236236
}
237237
return result;

src/NHibernate/Async/Collection/Generic/PersistentGenericIdentifierBag.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
using NHibernate.Loader;
2323
using NHibernate.Persister.Collection;
2424
using NHibernate.Type;
25+
using NHibernate.Util;
2526

2627
namespace NHibernate.Collection.Generic
2728
{
@@ -164,7 +165,7 @@ public override Task<ICollection> GetOrphansAsync(object snapshot, string entity
164165
try
165166
{
166167
var sn = (ISet<SnapshotElement>)GetSnapshot();
167-
return GetOrphansAsync(sn.Select(x => x.Value).ToArray(), (ICollection) _values, entityName, Session, cancellationToken);
168+
return GetOrphansAsync(sn.ToArray(x => x.Value), (ICollection) _values, entityName, Session, cancellationToken);
168169
}
169170
catch (Exception ex)
170171
{

src/NHibernate/Async/Id/IPostInsertIdentityPersister.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using NHibernate.Persister.Entity;
1818
using NHibernate.SqlCommand;
1919
using NHibernate.Type;
20+
using NHibernate.Util;
2021

2122
namespace NHibernate.Id
2223
{

src/NHibernate/Async/Id/SelectGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using NHibernate.SqlCommand;
1919
using NHibernate.SqlTypes;
2020
using NHibernate.Type;
21+
using NHibernate.Util;
2122

2223
namespace NHibernate.Id
2324
{

src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ public async Task BindSelectByUniqueKeyAsync(
566566
{
567567
cancellationToken.ThrowIfCancellationRequested();
568568
var propertyNames = GetUniqueKeyPropertyNames(suppliedPropertyNames);
569-
var parameterTypes = propertyNames.Select(GetPropertyType).ToArray();
569+
var parameterTypes = propertyNames.ToArray(p => GetPropertyType(p));
570570
var entity = binder.Entity;
571571
for (var i = 0; i < propertyNames.Length; i++)
572572
{

src/NHibernate/Async/Type/CompositeCustomType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using NHibernate.SqlTypes;
1818
using NHibernate.UserTypes;
1919
using System.Collections.Generic;
20+
using NHibernate.Util;
2021

2122
namespace NHibernate.Type
2223
{

src/NHibernate/Bytecode/Lightweight/AccessOptimizer.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Linq;
33
using System.Security;
44
using NHibernate.Properties;
5+
using NHibernate.Util;
56

67
namespace NHibernate.Bytecode.Lightweight
78
{
@@ -26,8 +27,8 @@ public AccessOptimizer(
2627
: this(
2728
getDelegate,
2829
setDelegate,
29-
getters.Select(o => (GetPropertyValueInvoker) o.Get).ToArray(),
30-
setters.Select(o => (SetPropertyValueInvoker) o.Set).ToArray(),
30+
getters.ToArray(o => (GetPropertyValueInvoker) o.Get),
31+
setters.ToArray(o => (SetPropertyValueInvoker) o.Set),
3132
null,
3233
null)
3334
{

src/NHibernate/Cache/NonstrictReadWriteCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public object[] GetMany(CacheKey[] keys, long timestamp)
7171
{
7272
log.Debug("Cache lookup: {0}", string.Join(",", keys.AsEnumerable()));
7373
}
74-
var results = _cache.GetMany(keys.Select(o => (object) o).ToArray());
74+
var results = _cache.GetMany(keys);
7575
if (!log.IsDebugEnabled())
7676
{
7777
return results;

src/NHibernate/Cache/ReadOnlyCache.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public object[] GetMany(CacheKey[] keys, long timestamp)
5555
{
5656
log.Debug("Cache lookup: {0}", string.Join(",", keys.AsEnumerable()));
5757
}
58-
var results = _cache.GetMany(keys.Select(o => (object) o).ToArray());
58+
var results = _cache.GetMany(keys);
5959
if (!log.IsDebugEnabled())
6060
{
6161
return results;
@@ -100,7 +100,7 @@ public bool[] PutMany(
100100
var skipKeyIndexes = new HashSet<int>();
101101
if (checkKeys.Any())
102102
{
103-
var objects = _cache.GetMany(checkKeys.Select(o => (object) o).ToArray());
103+
var objects = _cache.GetMany(checkKeys.ToArray());
104104
for (var i = 0; i < objects.Length; i++)
105105
{
106106
if (objects[i] != null)

src/NHibernate/Cache/ReadWriteCache.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public object[] GetMany(CacheKey[] keys, long timestamp)
152152
var result = new object[keys.Length];
153153
lock (_lockObject)
154154
{
155-
var lockables = _cache.GetMany(keys.Select(o => (object) o).ToArray());
155+
var lockables = _cache.GetMany(keys);
156156
for (var i = 0; i < lockables.Length; i++)
157157
{
158158
var lockable = (ILockable) lockables[i];
@@ -236,12 +236,12 @@ public bool[] PutMany(
236236
{
237237
log.Debug("Caching: {0}", string.Join(",", keys.AsEnumerable()));
238238
}
239-
var keysArr = keys.Cast<object>().ToArray();
240-
var lockValue = _cache.LockMany(keysArr);
239+
240+
var lockValue = _cache.LockMany(keys);
241241
try
242242
{
243243
var putBatch = new Dictionary<object, object>();
244-
var lockables = _cache.GetMany(keysArr);
244+
var lockables = _cache.GetMany(keys);
245245
for (var i = 0; i < keys.Length; i++)
246246
{
247247
var key = keys[i];
@@ -282,7 +282,7 @@ public bool[] PutMany(
282282
}
283283
finally
284284
{
285-
_cache.UnlockMany(keysArr, lockValue);
285+
_cache.UnlockMany(keys, lockValue);
286286
}
287287
}
288288
return result;

src/NHibernate/Cfg/XmlHbmBinding/PropertiesBinder.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -372,12 +372,12 @@ private void BindComponentProperty(HbmComponent componentMapping, Property prope
372372
HbmTuplizer[] tuplizers = componentMapping.tuplizer;
373373
if (tuplizers != null)
374374
{
375-
Array.ForEach(tuplizers.Select(tuplizer => new
376-
{
377-
TuplizerClassName = FullQualifiedClassName(tuplizer.@class, mappings),
378-
Mode = tuplizer.entitymode.ToEntityMode()
379-
}).ToArray(),
380-
x => model.AddTuplizer(x.Mode, x.TuplizerClassName));
375+
foreach (var tuplizer in tuplizers)
376+
{
377+
var mode = tuplizer.entitymode.ToEntityMode();
378+
var tuplizerClassName = FullQualifiedClassName(tuplizer.@class, mappings);
379+
model.AddTuplizer(mode, tuplizerClassName);
380+
}
381381
}
382382
}
383383

src/NHibernate/Collection/Generic/PersistentGenericIdentifierBag.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using NHibernate.Loader;
1313
using NHibernate.Persister.Collection;
1414
using NHibernate.Type;
15+
using NHibernate.Util;
1516

1617
namespace NHibernate.Collection.Generic
1718
{
@@ -159,7 +160,7 @@ public override bool IsSnapshotEmpty(object snapshot)
159160
public override IEnumerable GetDeletes(ICollectionPersister persister, bool indexIsFormula)
160161
{
161162
var snap = (ISet<SnapshotElement>)GetSnapshot();
162-
ArrayList deletes = new ArrayList(snap.Select(x => x.Id).ToArray());
163+
var deletes = snap.ToList(x => x.Id);
163164
for (int i = 0; i < _values.Count; i++)
164165
{
165166
if (_values[i] != null)
@@ -245,7 +246,7 @@ public override object GetSnapshot(ICollectionPersister persister)
245246
public override ICollection GetOrphans(object snapshot, string entityName)
246247
{
247248
var sn = (ISet<SnapshotElement>)GetSnapshot();
248-
return GetOrphans(sn.Select(x => x.Value).ToArray(), (ICollection) _values, entityName, Session);
249+
return GetOrphans(sn.ToArray(x => x.Value), (ICollection) _values, entityName, Session);
249250
}
250251

251252
public override void PreInsert(ICollectionPersister persister)

src/NHibernate/Criterion/InExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ private List<TypedValue> GetParameterTypedValues(ICriteria criteria, ICriteriaQu
143143
}
144144
else
145145
{
146-
return _values.Select(v => new TypedValue(type, v, false)).ToList();
146+
return _values.ToList(v => new TypedValue(type, v, false));
147147
}
148148
}
149149

src/NHibernate/Engine/Query/ParameterMetadata.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ParameterMetadata
1515
public ParameterMetadata(IEnumerable<OrdinalParameterDescriptor> ordinalDescriptors,
1616
IDictionary<string, NamedParameterDescriptor> namedDescriptorMap)
1717
{
18-
this.ordinalDescriptors = ordinalDescriptors == null ? Enumerable.Empty<OrdinalParameterDescriptor>().ToArray() : ordinalDescriptors.ToArray();
18+
this.ordinalDescriptors = ordinalDescriptors == null ? Array.Empty<OrdinalParameterDescriptor>() : ordinalDescriptors.ToArray();
1919

2020
this.namedDescriptorMap = namedDescriptorMap == null ? new Dictionary<string, NamedParameterDescriptor>(1) : new Dictionary<string, NamedParameterDescriptor>(namedDescriptorMap);
2121
}
@@ -61,4 +61,4 @@ public IType GetNamedParameterExpectedType(string name)
6161
return GetNamedParameterDescriptor(name).ExpectedType;
6262
}
6363
}
64-
}
64+
}

src/NHibernate/Hql/Ast/ANTLR/ASTQueryTranslatorFactory.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Collections.Generic;
2-
using System.Linq;
32
using NHibernate.Engine;
43
using NHibernate.Hql.Ast.ANTLR.Tree;
4+
using NHibernate.Util;
55

66
namespace NHibernate.Hql.Ast.ANTLR
77
{
@@ -24,8 +24,7 @@ static IQueryTranslator[] CreateQueryTranslators(IASTNode ast, string queryIdent
2424
var polymorphicParsers = AstPolymorphicProcessor.Process(ast, factory);
2525

2626
var translators = polymorphicParsers
27-
.Select(hql => new QueryTranslatorImpl(queryIdentifier, hql, filters, factory))
28-
.ToArray();
27+
.ToArray(hql => new QueryTranslatorImpl(queryIdentifier, hql, filters, factory));
2928

3029
foreach (var translator in translators)
3130
{

src/NHibernate/Hql/Ast/ANTLR/PolymorphicQuerySourceDetector.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using NHibernate.Engine;
66
using NHibernate.Hql.Ast.ANTLR.Tree;
77
using NHibernate.Hql.Util;
8+
using NHibernate.Util;
89

910
namespace NHibernate.Hql.Ast.ANTLR
1011
{
@@ -41,7 +42,7 @@ private void AddImplementorsToMap(IASTNode querySource, string className, string
4142
}
4243

4344
_map.Add(querySource,
44-
implementors.Select(implementor => MakeIdent(querySource, implementor)).ToArray());
45+
implementors.ToArray(implementor => MakeIdent(querySource, implementor)));
4546
}
4647

4748
private static string GetClassName(IASTNode querySource)

src/NHibernate/Hql/Ast/ANTLR/Tree/BinaryLogicOperatorNode.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,9 @@ private string Translate(int valueElements, string comparisonText, string[] lhsE
212212

213213
private static string[] ExtractMutationTexts(IASTNode operand, int count)
214214
{
215-
if ( operand is ParameterNode )
215+
if ( operand is ParameterNode )
216216
{
217-
return Enumerable.Repeat("?", count).ToArray();
217+
return ArrayHelper.Fill("?", count);
218218
}
219219
if (operand is SqlNode)
220220
{

src/NHibernate/Id/IPostInsertIdentityPersister.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using NHibernate.Persister.Entity;
88
using NHibernate.SqlCommand;
99
using NHibernate.Type;
10+
using NHibernate.Util;
1011

1112
namespace NHibernate.Id
1213
{
@@ -32,7 +33,7 @@ public static SqlString GetSelectByUniqueKeyString(
3233
{
3334
var uniqueKeyPropertyNames = suppliedPropertyNames ?? DetermineNameOfPropertiesToUse(entityPersister);
3435

35-
parameterTypes = uniqueKeyPropertyNames.Select(p => entityPersister.GetPropertyType(p)).ToArray();
36+
parameterTypes = uniqueKeyPropertyNames.ToArray(p => entityPersister.GetPropertyType(p));
3637
}
3738
else if (persister is IQueryableCollection collectionPersister)
3839
{

src/NHibernate/Id/SelectGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using NHibernate.SqlCommand;
99
using NHibernate.SqlTypes;
1010
using NHibernate.Type;
11+
using NHibernate.Util;
1112

1213
namespace NHibernate.Id
1314
{
@@ -58,7 +59,7 @@ internal SelectGeneratorDelegate(IPostInsertIdentityPersister persister, ISessio
5859
this.persister = persister;
5960
this.factory = factory;
6061

61-
uniqueKeySuppliedPropertyNames = suppliedUniqueKeyPropertyNames?.Split(',').Select(p => p.Trim()).ToArray();
62+
uniqueKeySuppliedPropertyNames = suppliedUniqueKeyPropertyNames?.Split(',').ToArray(p => p.Trim());
6263

6364
idSelectString = persister.GetSelectByUniqueKeyString(uniqueKeySuppliedPropertyNames, out uniqueKeyTypes);
6465
idType = persister.IdentifierType;

src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private void VisitMethod(MethodInfo methodInfo)
229229
if (methodInfo.IsGenericMethod)
230230
{
231231
_string.Append('[');
232-
_string.Append(string.Join(",", methodInfo.GetGenericArguments().Select(a => a.AssemblyQualifiedName).ToArray()));
232+
_string.Append(string.Join(",", methodInfo.GetGenericArguments().Select(a => a.AssemblyQualifiedName)));
233233
_string.Append(']');
234234
}
235235
}

src/NHibernate/Linq/Visitors/HqlGeneratorExpressionVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ protected HqlTreeNode VisitSubQueryExpression(SubQueryExpression expression)
581581

582582
protected HqlTreeNode VisitNewArrayExpression(NewArrayExpression expression)
583583
{
584-
var expressionSubTree = expression.Expressions.Select(exp => VisitExpression(exp)).ToArray();
584+
var expressionSubTree = expression.Expressions.ToArray(exp => VisitExpression(exp));
585585
return _hqlTreeBuilder.ExpressionSubTreeHolder(expressionSubTree);
586586
}
587587
}

src/NHibernate/Linq/Visitors/NhPartialEvaluatingExpressionVisitor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Linq;
33
using System.Linq.Expressions;
44
using NHibernate.Collection;
5+
using NHibernate.Util;
56
using Remotion.Linq.Clauses.Expressions;
67
using Remotion.Linq.Parsing;
78
using Remotion.Linq.Parsing.ExpressionVisitors;
@@ -54,7 +55,7 @@ public override bool IsEvaluatableMethodCall(MethodCallExpression node)
5455

5556
var attributes = node.Method
5657
.GetCustomAttributes(typeof(LinqExtensionMethodAttributeBase), false)
57-
.Cast<LinqExtensionMethodAttributeBase>().ToArray();
58+
.ToArray(x => (LinqExtensionMethodAttributeBase) x);
5859
return attributes.Length == 0 ||
5960
attributes.Any(a => a.PreEvaluation == LinqExtensionPreEvaluation.AllowPreEvaluation);
6061
}

src/NHibernate/Mapping/ByCode/Impl/AnyMapper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Reflection;
55
using NHibernate.Cfg.MappingSchema;
66
using NHibernate.Type;
7+
using NHibernate.Util;
78

89
namespace NHibernate.Mapping.ByCode.Impl
910
{
@@ -159,7 +160,7 @@ public void MetaValue(object value, System.Type entityType)
159160
metavalueKey, existingClassMetavalue, newClassMetavalue));
160161
}
161162
values[metavalueKey] = newClassMetavalue;
162-
any.metavalue = values.Select(vd => new HbmMetaValue {value = vd.Key, @class = vd.Value}).ToArray();
163+
any.metavalue = values.ToArray(vd => new HbmMetaValue {value = vd.Key, @class = vd.Value});
163164
}
164165

165166
public void Cascade(Cascade cascadeStyle)

0 commit comments

Comments
 (0)