Skip to content

Commit 7e351e8

Browse files
committed
Improve memory consumption of IndexInfo.ColumnIndexMap
1 parent 2eb8ee4 commit 7e351e8

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

Orm/Xtensive.Orm/Orm/Model/IndexInfo.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -329,23 +329,33 @@ public override void UpdateState()
329329
if (!IsPrimary)
330330
return;
331331

332-
var system = new List<int>();
332+
var keyColumnsCount = keyColumns.Count;
333+
var system = new int[keyColumnsCount + 2];
333334
var lazy = new List<int>();
334-
var regular = new List<int>();
335+
var regular = new int[Columns.Count - keyColumnsCount];
335336

336-
for (int i = 0, count = Columns.Count; i < count; i++) {
337+
var regularIndex = 0;
338+
var systemIndex = 0;
339+
340+
for (var i = 0; i < Columns.Count; i++) {
337341
var item = Columns[i];
338-
if (item.IsPrimaryKey || item.IsSystem)
339-
system.Add(i);
342+
if (item.IsPrimaryKey || item.IsSystem) {
343+
system[systemIndex++] = i;
344+
}
340345
else {
341346
if (item.IsLazyLoad)
342347
lazy.Add(i);
343-
else
344-
regular.Add(i);
348+
else {
349+
regular[regularIndex++] = i;
350+
//regularIndex++;
351+
}
345352
}
346353
}
347354

348-
ColumnIndexMap = new ColumnIndexMap(system, regular, lazy);
355+
ColumnIndexMap = new ColumnIndexMap(
356+
(systemIndex == system.Length) ? system : new ArraySegment<int>(system, 0, systemIndex),
357+
(regularIndex == 0) ? Array.Empty<int>() : new ArraySegment<int>(regular, 0, regularIndex),
358+
(lazy.Count == 0) ? Array.Empty<int>() : lazy);
349359
}
350360

351361
/// <inheritdoc/>

0 commit comments

Comments
 (0)