public void SaveRowsData(InformationSystemsBase system, List <RowData> rowsData) { if (rowsData == null || rowsData.Count == 0) { return; } using (ClickHouseBulkCopy bulkCopyInterface = new ClickHouseBulkCopy(_connection) { DestinationTableName = "RowsData", BatchSize = 100000 }) { var values = rowsData.Select(i => new object[] { system.Name, i.RowId, i.Period, Severities.GetPresentationByName(i.Severity.ToString()), i.ConnectId ?? 0, i.Session ?? 0, TransactionStatuses.GetPresentationByName(i.TransactionStatus.ToString()), (i.TransactionDate == null || i.TransactionDate < _minDateTime ? _minDateTime : i.TransactionDate), i.TransactionId ?? 0, i.User?.Name ?? string.Empty, i.User?.Uuid.ToString() ?? _emptyGuidAsString, i.Computer?.Name ?? string.Empty, Applications.GetPresentationByName(i.Application?.Name ?? string.Empty), Events.GetPresentationByName(i.Event?.Name ?? string.Empty), i.Comment ?? string.Empty, i.Metadata?.Name ?? string.Empty, i.Metadata?.Uuid.ToString() ?? _emptyGuidAsString, i.Data ?? string.Empty, (i.DataUuid ?? string.Empty).NormalizeShortUUID(), i.DataPresentation ?? string.Empty, i.WorkServer?.Name ?? string.Empty, i.PrimaryPort?.Name ?? string.Empty, i.SecondaryPort?.Name ?? string.Empty }).AsEnumerable(); _extendedActions?.BeforeSaveData(system, rowsData, ref values); var bulkResult = bulkCopyInterface.WriteToServerAsync(values); bulkResult.Wait(); } }