Files
speckle-sharp-sdk/tests/Speckle.Sdk.Tests.Performance/Benchmarks/GeneralDeserializerTest.cs
T
Adam Hathcock 715bb7274a Batch by size, Closures and Detached items are computed differently (#164)
* Can debug dependencies

* Different exceptions

* Uses root id only after we found it to signal the end

* DataChunks are created later and need to be accounted for

* format

* use app ids in tests and references

* check sqlite cache after serialize

* use dummy to go through channels to end

* fmt

* Extend channel lib to batch by size

* fmt

* build fix

* adjust limits

* FIx sending

* Optimize reference generation

* more

* remove tolist

* rework closures to be constant and serializer only deals with current....references bases are cached

* fix chunk creation

* another bug fix

* clean up with factories

* add deserializer factory

* Needed to reference interface

* move around streamId

* some clean up

* Use StringBuilder pool on serialization to reduce memory pressure

* remove extra

* remove extra clears

* Fix a flaw in batchsize

* use default complete

* format

* loader should use 1 writer that is batched

* remove redundant ref gen

* Fix graphql commands by adding project id
2024-11-12 14:25:49 +00:00

76 lines
2.5 KiB
C#

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using Microsoft.Extensions.DependencyInjection;
using Speckle.Objects.Geometry;
using Speckle.Sdk.Credentials;
using Speckle.Sdk.Helpers;
using Speckle.Sdk.Host;
using Speckle.Sdk.Logging;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
using Speckle.Sdk.Serialisation.V2;
using Speckle.Sdk.Serialisation.V2.Receive;
namespace Speckle.Sdk.Tests.Performance.Benchmarks;
/// <summary>
/// How many threads on our Deserializer is optimal
/// </summary>
[MemoryDiagnoser]
[SimpleJob(RunStrategy.Monitoring, 0, 0, 2)]
public class GeneralDeserializer : IDisposable
{
private const bool skipCache = true;
/*
private const string url = "https://latest.speckle.systems/projects/a3ac1b2706/models/59d3b0f3c6"; //small?
private const string streamId = "a3ac1b2706";
private const string rootId = "7d53bcf28c6696ecac8781684a0aa006";*/
private const string url = "https://latest.speckle.systems/projects/2099ac4b5f/models/da511c4d1e"; //perf?
private const string streamId = "2099ac4b5f";
private const string rootId = "30fb4cbe6eb2202b9e7b4a4fcc3dd2b6";
private TestDataHelper _dataSource;
[GlobalSetup]
public async Task Setup()
{
TypeLoader.Initialize(typeof(Base).Assembly, typeof(Point).Assembly);
_dataSource = new TestDataHelper();
await _dataSource
.SeedTransport(new Account() { serverInfo = new() { url = url } }, streamId, rootId, skipCache)
.ConfigureAwait(false);
}
[Benchmark]
public async Task<Base> RunTest_New()
{
var sqlite = new SQLiteReceiveCacheManager(streamId);
var serverObjects = new ServerObjectManager(
TestDataHelper.ServiceProvider.GetRequiredService<ISpeckleHttp>(),
TestDataHelper.ServiceProvider.GetRequiredService<ISdkActivityFactory>(),
new Uri(url),
streamId,
null
);
var o = new ObjectLoader(sqlite, serverObjects, null);
var process = new DeserializeProcess(null, o, new ObjectDeserializerFactory());
return await process.Deserialize(rootId, default, new(skipCache)).ConfigureAwait(false);
}
/*
[Benchmark]
public async Task<Base> RunTest_Old()
{
SpeckleObjectDeserializer sut = new() { ReadTransport = _dataSource.Transport };
string data = await _dataSource.Transport.GetObject(_dataSource.ObjectId)!;
return await sut.DeserializeAsync(data);
}
*/
[GlobalCleanup]
public void Cleanup() => Dispose();
public void Dispose() => _dataSource.Dispose();
}