cca8828565
* Use a stack channel for deserialization * multi-threaded * add object dictionary pool * more pooling * adjust sqlite transport * format * Optimize IsPropNameValid * object loader first pass * save test * add cache pre check * save better deserialize * mostly works * uses tasks but slower at end * rework to make more sense * add check to avoid multi-deserialize * modify max parallelism * async enqueuing of tasks * switch to more asyncenumerable * fmt * fmt * cleanup sqlite * make ServerObjectManager * revert change * add ability to skip cache check * cache json to know what is loaded * testing * clean up usage * clean up and added new op * Fix exception handling * fixing progress * remove codejam * remove stackchannel * remove console writeline * add cache check shortcut for root object * recevie2 benchmark --------- Co-authored-by: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
75 lines
2.1 KiB
C#
75 lines
2.1 KiB
C#
using Microsoft.Data.Sqlite;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Speckle.Sdk.Api;
|
|
using Speckle.Sdk.Credentials;
|
|
using Speckle.Sdk.Host;
|
|
using Speckle.Sdk.Models;
|
|
using Speckle.Sdk.Transports;
|
|
|
|
namespace Speckle.Sdk.Tests.Performance;
|
|
|
|
public sealed class TestDataHelper : IDisposable
|
|
{
|
|
private static readonly string s_basePath = $"./temp {Guid.NewGuid()}";
|
|
public SQLiteTransport Transport { get; private set; }
|
|
|
|
public static IServiceProvider ServiceProvider { get; set; }
|
|
public string ObjectId { get; private set; }
|
|
|
|
public TestDataHelper()
|
|
{
|
|
var serviceCollection = new ServiceCollection();
|
|
serviceCollection.AddSpeckleSdk(HostApplications.Navisworks, HostAppVersion.v2023, "Test");
|
|
ServiceProvider = serviceCollection.BuildServiceProvider();
|
|
}
|
|
|
|
public async Task SeedTransport(Account account, string streamId, string objectId, bool skipCache)
|
|
{
|
|
// Transport = new SQLiteTransport(s_basePath, APPLICATION_NAME);
|
|
Transport = new SQLiteTransport();
|
|
|
|
//seed SQLite transport with test data
|
|
ObjectId = await SeedTransport(account, streamId, objectId, Transport, skipCache).ConfigureAwait(false);
|
|
}
|
|
|
|
public async Task<string> SeedTransport(
|
|
Account account,
|
|
string streamId,
|
|
string objectId,
|
|
ITransport transport,
|
|
bool skipCache
|
|
)
|
|
{
|
|
if (!skipCache)
|
|
{
|
|
using ServerTransport remoteTransport = ServiceProvider
|
|
.GetRequiredService<IServerTransportFactory>()
|
|
.Create(account, streamId);
|
|
transport.BeginWrite();
|
|
await remoteTransport.CopyObjectAndChildren(objectId, transport).ConfigureAwait(false);
|
|
transport.EndWrite();
|
|
await transport.WriteComplete().ConfigureAwait(false);
|
|
}
|
|
|
|
return objectId;
|
|
}
|
|
|
|
public async Task<Base> DeserializeBase()
|
|
{
|
|
return await ServiceProvider
|
|
.GetRequiredService<IOperations>()
|
|
.Receive(ObjectId, null, Transport)
|
|
.ConfigureAwait(false);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Transport.Dispose();
|
|
SqliteConnection.ClearAllPools();
|
|
if (Directory.Exists(s_basePath))
|
|
{
|
|
Directory.Delete(s_basePath, true);
|
|
}
|
|
}
|
|
}
|