性能优化,减少Lambda闭包分配
This commit is contained in:
parent
b34ac104ef
commit
fb3c4ac5f6
@ -181,7 +181,7 @@ public class MainHostedService : BackgroundService
|
||||
new { 条目 = "耗时", 值 = elapsedTime.ToString("F2") + " 秒" },
|
||||
new
|
||||
{
|
||||
条目 = "平均输出速度",
|
||||
条目 = "平均处理速度",
|
||||
值 = (_context.OutputCount / elapsedTime).ToString("F2") + " 条记录/秒"
|
||||
},
|
||||
new { 条目 = "内存占用峰值", 值 = _context.MaxMemoryUsage + " 兆字节" }
|
||||
|
@ -52,8 +52,14 @@ public class DataRecordQueue : IDisposable
|
||||
{
|
||||
var charCount = record.FieldCharCount;
|
||||
LongestFieldCharCount = Math.Max(LongestFieldCharCount, charCount);
|
||||
if(_currentCharCount + charCount > _maxCharCount)
|
||||
await TaskExtensions.WaitUntil(() => _currentCharCount + charCount < _maxCharCount, 50);
|
||||
if (_currentCharCount + charCount > _maxCharCount)
|
||||
{
|
||||
// 不用Task.WaitUntil是为了防止产生Lambda闭包
|
||||
while (!(_currentCharCount + charCount < _maxCharCount))
|
||||
{
|
||||
await Task.Delay(50);
|
||||
}
|
||||
}
|
||||
_queue.Add(record);
|
||||
Interlocked.Add(ref _currentCharCount, charCount);
|
||||
OnRecordWrite?.Invoke();
|
||||
|
@ -133,7 +133,7 @@ public class CsvReader : IDataReader
|
||||
|
||||
if (!hasQuote && currChar == delimiter)
|
||||
{
|
||||
result.Add(source[start..(end)].ToString());
|
||||
result.Add(source[start..(end)].ToString()); // 超大型字符串会在LOH中分配内存,没救
|
||||
start = end + 1;
|
||||
++end;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user