优化内存分配
This commit is contained in:
@@ -17,24 +17,24 @@ public class OutputService : IOutputService
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly DataRecordQueue _consumerQueue;
|
||||
private readonly IOptions<DataTransformOptions> _transOptions;
|
||||
private readonly IOptions<DatabaseOutputOptions> _options;
|
||||
private readonly IOptions<DatabaseOutputOptions> _outputOptions;
|
||||
private readonly IOptions<DataTransformOptions> _transformOptions;
|
||||
private readonly ProcessContext _context;
|
||||
private readonly TaskManager _taskManager;
|
||||
|
||||
public OutputService(ILogger<OutputService> logger,
|
||||
[FromKeyedServices(ProcessStep.Consumer)] DataRecordQueue consumerQueue,
|
||||
IOptions<DatabaseOutputOptions> options,
|
||||
IOptions<DataTransformOptions> transOptions,
|
||||
IOptions<DatabaseOutputOptions> outputOptions,
|
||||
ProcessContext context,
|
||||
TaskManager taskManager)
|
||||
TaskManager taskManager,
|
||||
IOptions<DataTransformOptions> transformOptions)
|
||||
{
|
||||
_logger = logger;
|
||||
_consumerQueue = consumerQueue;
|
||||
_transOptions = transOptions;
|
||||
_options = options;
|
||||
_outputOptions = outputOptions;
|
||||
_context = context;
|
||||
_taskManager = taskManager;
|
||||
_transformOptions = transformOptions;
|
||||
}
|
||||
|
||||
public async Task ExecuteAsync(CancellationToken cancellationToken)
|
||||
@@ -50,9 +50,10 @@ public class OutputService : IOutputService
|
||||
records.Add(record);
|
||||
count++;
|
||||
//_logger.LogInformation(@"*****OutputCount: {count} *****",count);
|
||||
if (records.Count >= _options.Value.FlushCount)
|
||||
if (records.Count >= _outputOptions.Value.FlushCount)
|
||||
{
|
||||
await FlushAsync(records);
|
||||
_context.AddOutput(count);
|
||||
records.Clear();
|
||||
}
|
||||
if (_context.GetExceptions().Count>0)
|
||||
@@ -67,7 +68,7 @@ public class OutputService : IOutputService
|
||||
records.Clear();
|
||||
_logger.LogInformation("***** Mysql output thread completed *****");
|
||||
}
|
||||
}, _options.Value.TaskCount);
|
||||
}, _outputOptions.Value.TaskCount);
|
||||
|
||||
await _taskManager.WaitAll();
|
||||
//_context.CompleteOutput();
|
||||
@@ -79,8 +80,8 @@ public class OutputService : IOutputService
|
||||
{
|
||||
var count = 0;
|
||||
await using var output = new MySqlDestination(
|
||||
_options.Value.ConnectionString ?? throw new InvalidOperationException("Connection string is required"),
|
||||
_logger, _context,true);
|
||||
_outputOptions.Value.ConnectionString ?? throw new InvalidOperationException("Connection string is required"),
|
||||
_logger, _context, _transformOptions);
|
||||
//if (records == null || records.Count() == 0) return;
|
||||
//var dbName = $"cferp_test_1";
|
||||
//if (records != null && records.Count() > 0)
|
||||
@@ -102,7 +103,7 @@ public class OutputService : IOutputService
|
||||
await output.WriteRecordAsync(record);
|
||||
count++;
|
||||
}
|
||||
await output.FlushAsync(_options.Value.MaxAllowedPacket, _transOptions);
|
||||
await output.FlushAsync(_outputOptions.Value.MaxAllowedPacket);
|
||||
_context.AddOutput(count);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user