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