2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2026-04-29 06:48:41 +00:00
Files
esiur-dotnet/Tests/Distribution/ResourceCount/Server/Program.cs
T
2026-04-05 12:35:27 +03:00

59 lines
1.8 KiB
C#

// ============================================================
// Test 2: Resource Count Scalability — SERVER NODE
// Hosts an increasing number of resources to test warehouse
// lookup overhead and memory footprint as the store grows.
//
// Usage: dotnet run -- --resources 10000 --port 10901
// ============================================================
using Esiur.Resource;
using Esiur.Stores;
using Esiur.Protocol;
var resourceCount = int.Parse(GetArg(args, "--resources", "10000"));
var port = int.Parse(GetArg(args, "--port", "10901"));
Console.WriteLine($"[Server-T2] Creating {resourceCount} resources on port {port}");
var wh = new Warehouse();
await wh.Put("sys", new MemoryStore());
var server = await wh.Put("sys/server", new EpServer() { Port = (ushort)port });
long memBefore = GC.GetTotalMemory(forceFullCollection: true);
List<SensorResource> sensors = new List<SensorResource>();
for (int i = 0; i < resourceCount; i++)
{
var sensor = await wh.Put($"sys/sensor_{i}",
new SensorResource { SensorId = i, Value = i * 0.1 });
sensors.Add(sensor);
}
await wh.Open();
server.MapCall("UpdateValues", () =>
{
foreach(var sensor in sensors)
{
sensor.Value += 0.1;
}
});
long memAfter = GC.GetTotalMemory(forceFullCollection: true);
double memMB = (memAfter - memBefore) / (1024.0 * 1024.0);
Console.WriteLine($"[Server-T2] Ready. Resources={resourceCount} MemoryUsed={memMB:F1} MB");
Console.WriteLine($"[Server-T2] Per-resource ≈ {(memAfter - memBefore) / (double)resourceCount:F0} bytes");
Console.WriteLine("Press ENTER to stop.");
Console.ReadLine();
await wh.Close();
static string GetArg(string[] args, string key, string def)
{
int i = Array.IndexOf(args, key);
return (i >= 0 && i + 1 < args.Length) ? args[i + 1] : def;
}