Skip to content

Commit 0d136af

Browse files
author
Alexander van Delft
committed
[REFACTOR] Assembler performance
1 parent a50a889 commit 0d136af

File tree

16 files changed

+84
-36
lines changed

16 files changed

+84
-36
lines changed

CDP4Common/CDP4Common.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>net48;netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4Common Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 Common Class Library that contains DTOs, POCOs</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael, Ahmed</Authors>
@@ -20,7 +20,7 @@
2020
<PackageTags>CDP COMET ECSS-E-TM-10-25</PackageTags>
2121
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2222
<PackageReleaseNotes>
23-
[ADD] SharpZipLibExtension Methods
23+
[BUMP] Version to 27.4.1
2424
</PackageReleaseNotes>
2525
<PackageReadmeFile>README.md</PackageReadmeFile>
2626
</PropertyGroup>

CDP4Dal.Tests/AssemblerTestFixture.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace CDP4Dal.Tests
2626
{
2727
using System;
2828
using System.Collections.Generic;
29+
using System.Diagnostics;
2930
using System.Linq;
3031
using System.Threading.Tasks;
3132

@@ -191,6 +192,59 @@ public async Task AssertThatAssemblerSynchronizationWorks()
191192
Assert.That(assembler.Cache.TryGetValue(new CacheKey(categoryToRemove.Iid, null), out lazyCat), Is.False);
192193
}
193194

195+
[Test]
196+
public async Task AssertThatAssemblerSynchronizationWorksFastEnough()
197+
{
198+
var assembler = new Assembler(this.uri, this.messageBus);
199+
200+
var domain = new Dto.DomainOfExpertise(Guid.NewGuid(), 1);
201+
this.testInput.Add(domain);
202+
203+
for (var i = 0; i < 20000; i++)
204+
{
205+
this.testInput.Add(new Dto.ElementDefinition(Guid.NewGuid(), 1) {Owner = domain.Iid});
206+
}
207+
208+
var sw = new Stopwatch();
209+
210+
sw.Reset();
211+
sw.Start();
212+
213+
// 1st call of Synnchronize
214+
await assembler.Synchronize(this.testInput);
215+
216+
sw.Stop();
217+
var elapsed = sw.Elapsed;
218+
await TestContext.Progress.WriteLineAsync($"First synchronize took {elapsed}");
219+
// Modification of the input Dtos
220+
Assert.That(assembler.Cache, Is.Not.Empty);
221+
Assert.That(this.testInput.Count, Is.EqualTo(assembler.Cache.Count));
222+
223+
sw.Reset();
224+
sw.Start();
225+
226+
// 1st call of Synnchronize
227+
await assembler.Synchronize(this.testInput);
228+
229+
sw.Stop();
230+
elapsed = sw.Elapsed;
231+
await TestContext.Progress.WriteLineAsync($"Second synchronize took {elapsed}");
232+
Assert.That(assembler.Cache, Is.Not.Empty);
233+
Assert.That(this.testInput.Count, Is.EqualTo(assembler.Cache.Count));
234+
235+
sw.Reset();
236+
sw.Start();
237+
238+
// 1st call of Synnchronize
239+
await assembler.Synchronize(this.testInput);
240+
241+
sw.Stop();
242+
elapsed = sw.Elapsed;
243+
await TestContext.Progress.WriteLineAsync($"Third synchronize took {elapsed}");
244+
Assert.That(assembler.Cache, Is.Not.Empty);
245+
Assert.That(this.testInput.Count, Is.EqualTo(assembler.Cache.Count));
246+
}
247+
194248
[Test]
195249
public async Task AssertThatRevisionsAreCachedCorrectly()
196250
{

CDP4Dal/Assembler.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,7 @@ public async Task Synchronize(IEnumerable<CDP4Common.DTO.Thing> dtoThings, bool
143143
logger.Info("Start Synchronization of {0}", this.IDalUri);
144144

145145
var existentGuid =
146-
this.Cache.Select(
147-
x => new Tuple<CacheKey, int>(x.Value.Value.CacheKey, x.Value.Value.RevisionNumber))
148-
.ToList();
146+
new Dictionary<CacheKey, int>(this.Cache.ToDictionary(x => x.Value.Value.CacheKey, y => y.Value.Value.RevisionNumber));
149147

150148
this.CheckPartitionDependentContainmentContainerIds(dtoThings);
151149

@@ -224,17 +222,14 @@ public async Task Synchronize(IEnumerable<CDP4Common.DTO.Thing> dtoThings, bool
224222
if (succeed)
225223
{
226224
var thingObject = updatedLazyThing.Value;
227-
var cacheId = new CacheKey(dtoThing.Iid, dtoThing.IterationContainerId);
228-
229-
if (!existentGuid.Select(x => x.Item1).Contains(cacheId))
225+
226+
if (!existentGuid.TryGetValue(cacheKey, out var cacheThingRevisionNumber))
230227
{
231228
this.messageBus.SendObjectChangeEvent(thingObject, EventKind.Added);
232229
messageCounter++;
233230
}
234231
else
235232
{
236-
var cacheThingRevisionNumber = existentGuid.Single(x => x.Item1.Equals(cacheId)).Item2;
237-
238233
if (dtoThing.RevisionNumber > cacheThingRevisionNumber)
239234
{
240235
// send event if revision number has increased from the old cached version
@@ -243,7 +238,7 @@ public async Task Synchronize(IEnumerable<CDP4Common.DTO.Thing> dtoThings, bool
243238
}
244239
else if (dtoThing.RevisionNumber < cacheThingRevisionNumber)
245240
{
246-
if (this.Cache.TryGetValue(cacheId, out var cacheThing))
241+
if (this.Cache.TryGetValue(cacheKey, out var cacheThing))
247242
{
248243
// send event if revision number is lower. That means that the original cached item was changed (revision was added!) ICDPMessageBus.Current.SendObjectChangeEvent(cacheThing.Value, EventKind.Updated);
249244
this.messageBus.SendObjectChangeEvent(cacheThing.Value, EventKind.Updated);

CDP4Dal/CDP4Dal.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>net48;netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4Dal Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 Data Access Layer library, a consumer of an ECSS-E-TM-10-25 Annex C API</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael, Ahmed</Authors>
@@ -20,7 +20,7 @@
2020
<PackageTags>CDP COMET ECSS-E-TM-10-25</PackageTags>
2121
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2222
<PackageReleaseNotes>
23-
[BUMP] To CDP4Common 27.4.0
23+
[REFACTOR] Assembler performance
2424
</PackageReleaseNotes>
2525
<PackageReadmeFile>README.md</PackageReadmeFile>
2626
</PropertyGroup>

CDP4DalCommon/CDP4DalCommon.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Company>Starion Group S.A.</Company>
66
<Language>latest</Language>
77
<Title>CDP4DalCommon Community Edition</Title>
8-
<VersionPrefix>27.4.0</VersionPrefix>
8+
<VersionPrefix>27.4.1</VersionPrefix>
99
<Description>CDP4 Common Class Library that contains common types for any CDP4 server and the CDP4Dal</Description>
1010
<Copyright>Copyright © Starion Group S.A.</Copyright>
1111
<Authors>Sam, Alex, Alexander, Nathanael, Antoine, Omar, Jaime</Authors>
@@ -21,7 +21,7 @@
2121
<PackageTags>CDP COMET ECSS-E-TM-10-25</PackageTags>
2222
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2323
<PackageReleaseNotes>
24-
[BUMP] To CDP4Common 27.4.0
24+
[BUMP] To CDP4Common 27.4.1
2525
</PackageReleaseNotes>
2626
<PackageReadmeFile>README.md</PackageReadmeFile>
2727
<GenerateDocumentationFile>true</GenerateDocumentationFile>

CDP4JsonFileDal/CDP4JsonFileDal.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>net48;netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4JsonFileDal Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 Json File Dal Plugin</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael</Authors>

CDP4JsonSerializer/CDP4JsonSerializer.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>net48;netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4JsonSerializer Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 JSON Serialization Library</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael</Authors>
@@ -20,7 +20,7 @@
2020
<PackageTags>CDP COMET ECSS-E-TM-10-25 JSON</PackageTags>
2121
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2222
<PackageReleaseNotes>
23-
[BUMP] To CDP4Common 27.4.0
23+
[BUMP] To CDP4Common 27.4.1
2424
</PackageReleaseNotes>
2525
<PackageReadmeFile>README.md</PackageReadmeFile>
2626
</PropertyGroup>

CDP4MessagePackSerializer/CDP4MessagePackSerializer.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>net48;netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4MessagePackSerializer Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 MessagePack Serialization Library</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Alex, Alexander, Nathanael, Antoine, Omar</Authors>
@@ -20,8 +20,7 @@
2020
<PackageTags>CDP COMET ECSS-E-TM-10-25 MessagePack</PackageTags>
2121
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2222
<PackageReleaseNotes>
23-
[BUMP] To CDP4Common 27.4.0
24-
[Update] To MessagePack 2.5.187
23+
[BUMP] To CDP4Common 27.4.1
2524
</PackageReleaseNotes>
2625
<PackageReadmeFile>README.md</PackageReadmeFile>
2726
</PropertyGroup>

CDP4Reporting/CDP4Reporting.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4Reporting Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 Reporting</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Alex, Alexander</Authors>
@@ -20,7 +20,7 @@
2020
<PackageTags>CDP COMET ECSS-E-TM-10-25</PackageTags>
2121
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2222
<PackageReleaseNotes>
23-
[BUMP] To CDP4Common 27.4.0
23+
[BUMP] To CDP4Common 27.4.1
2424
</PackageReleaseNotes>
2525
<LangVersion>latest</LangVersion>
2626
<PackageReadmeFile>README.md</PackageReadmeFile>

CDP4RequirementsVerification/CDP4RequirementsVerification.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFrameworks>net48;netstandard2.0</TargetFrameworks>
55
<Company>Starion Group S.A.</Company>
66
<Title>CDP4RequirementsVerification Community Edition</Title>
7-
<VersionPrefix>27.4.0</VersionPrefix>
7+
<VersionPrefix>27.4.1</VersionPrefix>
88
<Description>CDP4 Class Library that provides requirement verification</Description>
99
<Copyright>Copyright © Starion Group S.A.</Copyright>
1010
<Authors>Sam, Alex, Alexander, Yevhen, Nathanael</Authors>
@@ -20,7 +20,7 @@
2020
<PackageTags>CDP COMET ECSS-E-TM-10-25</PackageTags>
2121
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
2222
<PackageReleaseNotes>
23-
[BUMP] To CDP4Common 27.4.0
23+
[BUMP] To CDP4Common 27.4.1
2424
</PackageReleaseNotes>
2525
<PackageReadmeFile>README.md</PackageReadmeFile>
2626
</PropertyGroup>

0 commit comments

Comments
 (0)