using System.Collections.Concurrent; using System.Diagnostics; using MesETL.App.Services.ETL; using MesETL.Shared.Helper; using Xunit.Abstractions; using ZstdSharp; namespace TestProject1; public class Test { private readonly ITestOutputHelper _output; public Test(ITestOutputHelper output) { _output = output; } [Theory] [InlineData([@"D:\Dump\NewMockData2\cferp.order_box_block.00000.dat.zst"])] public async Task ZstdDecompressTest(string inputFile) { var count = 0; var flag = true; var sw = Stopwatch.StartNew(); var reader = new StreamReader(new DecompressionStream(File.OpenRead(inputFile))); var monitor = Task.Run(async () => { var lastElapse = sw.ElapsedMilliseconds; var lastCount = 0; while (flag) { await Task.Delay(2000); _output.WriteLine($"speed: {(count - lastCount) / ((sw.ElapsedMilliseconds - lastElapse) / 1000f)}"); lastElapse = sw.ElapsedMilliseconds; lastCount = count; } }); while (!reader.EndOfStream) { var str = await reader.ReadLineAsync(); char a; // foreach (var c in str) // { // a = c; // } CsvReader.ParseRowFaster(str, '"', ','); count++; } flag = false; monitor.Wait(); } public static IEnumerable ParseRowData() { yield return [@"20220104020855,""2022-01-04 10:06:46"",1455,""0001-01-01 00:00:00"",""1"",0,""2"",""0"",\N,""0"",22010"]; yield return [@"20220104020858,""2022-01-04 15:08:22"",1455,""0001-01-01 00:00:00"",""1"",838,""2"",""0"",""5"",""0"",22010"]; yield return [@"5586326,20220104020855,220105981029,""1"",482278,482279,3768774,0,0,""1.000"",1455,22010"]; yield return [@"130658,""PD220104002302"",3,4616,""2022-01-04 15:10:40"",1443,""2022-01-04 15:10:40"",""2022-01-04 15:10:51"",0,"""",0,1455,""0001-01-01 00:00:00"",1,5B32303232303130343032303835385D,E590B8E5A1912D2DE590B8E5A1912D2D31382D2D323030302A3630302D2D3130E789872D2D352E3936333B6361696C69616F2D2D79616E73652D2D392D2D323031302A313137342D2D31E789872D2D322E3336,""0"",0"]; } [Theory] [MemberData(nameof(ParseRowData))] public void ParseRowFasterTest(string row) { var fields = CsvReader.ParseRowFaster(row, '"', ','); _output.WriteLine(string.Join(',', fields)); } [Fact] public void DictMemoryTest() { var dict = new ConcurrentDictionary(); for (int i = 0; i < 3000000; i++) { dict.AddOrUpdate(Guid.NewGuid().ToString(), Random.Shared.NextInt64(1000000000L, 9999999999L).ToString(), (_, __) => Random.Shared.NextInt64(1000000000L, 9999999999L).ToString()); } while (true) { } } [Fact] public void GetResult() { var input = """ machine: 19303/19061 order: 3416759/3415192 order_block_plan: 2934281/1968850 order_block_plan_item: 0/235927707 order_block_plan_result: 1375479/277667 order_box_block: 23457666/23450841 order_data_block: 513012248/513012248 order_data_goods: 18655270/18655270 order_data_parts: 353139066/353139066 order_item: 955274320/955274320 order_module: 102907480/56935691 order_module_extra: 40044077/40044077 order_module_item: 49209022/49209022 order_package: 12012712/12012712 order_package_item: 0/80605124 order_process: 4045309/2682043 order_process_step: 8343418/5505158 order_process_step_item: 14856509/9787696 order_scrap_board: 136096/136090 process_group: 1577/1543 process_info: 9212/9008 process_item_exp: 30/30 process_schdule_capacity: 42442/42442 process_step_efficiency: 8/8 report_template: 7358/7338 simple_package: 142861/137730 simple_plan_order: 1167004/854699 simple_plan_order: 0/55677 sys_config: 2608/2608 work_calendar: 11/11 work_shift: 73/73 work_time: 77/77 order_process_step_item: 14856509/9790701 order_process_step: 8343418/5506925 order_module: 102907480/56935691 order_process: 4045309/2682043 report_template: 7358/7358 process_info: 9212/9212 process_group: 1577/1577 order_block_plan_result: 1375479/277667 order_box_block: 23457666/23457666 order_block_plan: 2934281/1968850 order: 3416759/3416759 machine: 19303/19303 order_scrap_board: 136096/136096 """; var arr = input.Split('\n').Select(s => { var x = s.Split(':'); var y = x[1].Split('/').Select(i => long.Parse(i)).ToArray(); return new {TABLE_NAME = x[0], INPUT = y[0], OUTPUT = y[1], FILTER = y[0] - y[1]}; }).OrderBy(s => s.TABLE_NAME); _output.WriteLine(arr.ToMarkdownTable()); } }