using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using System.Text.Json; class CacheLoader { public string Dir { get; } private readonly Dictionary cache = new(); public CacheLoader(string dir) { Dir = dir; } public JsonElement LoadOrFromCache(string name) { if (!cache.TryGetValue(name, out byte[] result)) { result = File.ReadAllBytes($"{Dir}/{name}.json"); cache.Add(name, result); } return JsonDocument.Parse(result).RootElement; } } internal class Benchmark { public static void Run(string dir) { var loader = new CacheLoader(dir); var tables = new List(); for (int k = 0; k < 10; k++) { var w = new Stopwatch(); w.Start(); for (int i = 0; i < 100; i++) { tables.Add(new cfg.Tables(loader.LoadOrFromCache)); } w.Stop(); Console.WriteLine("== cost {0} ms", w.ElapsedMilliseconds); } } }