性能优化,减少Lambda闭包分配

This commit is contained in:
陈梓阳 2024-12-12 10:55:17 +08:00
parent b34ac104ef
commit fb3c4ac5f6
3 changed files with 10 additions and 4 deletions

View File

@ -181,7 +181,7 @@ public class MainHostedService : BackgroundService
new { = "耗时", = elapsedTime.ToString("F2") + " 秒" },
new
{
= "平均输出速度",
= "平均处理速度",
= (_context.OutputCount / elapsedTime).ToString("F2") + " 条记录/秒"
},
new { = "内存占用峰值", = _context.MaxMemoryUsage + " 兆字节" }

View File

@ -53,7 +53,13 @@ public class DataRecordQueue : IDisposable
var charCount = record.FieldCharCount;
LongestFieldCharCount = Math.Max(LongestFieldCharCount, charCount);
if (_currentCharCount + charCount > _maxCharCount)
await TaskExtensions.WaitUntil(() => _currentCharCount + charCount < _maxCharCount, 50);
{
// 不用Task.WaitUntil是为了防止产生Lambda闭包
while (!(_currentCharCount + charCount < _maxCharCount))
{
await Task.Delay(50);
}
}
_queue.Add(record);
Interlocked.Add(ref _currentCharCount, charCount);
OnRecordWrite?.Invoke();

View File

@ -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;
}