Оптимизация кода для присоединения одного списка к другому по времениC#

Место общения программистов C#
Ответить
Anonymous
 Оптимизация кода для присоединения одного списка к другому по времени

Сообщение Anonymous »

У меня есть список, содержащий диапазоны дат, назовем его «shiftRange», как показано ниже:
start to end
9:00am to 10:00 am
10:00am to 11:am
11:00am to 12:00 pm

У меня есть еще один список, который содержит входы и выходы сотрудников, назовем его applyRecords, который может перекрываться:
signIn to signOut
E1: 9:10am to 9:30am
E2: 9:20am to 10:10am
E3: 10:10am to 11:00am

Теперь я использую ApplyRecords, чтобы разбить ShiftRange на такие фрагменты:
start to end
9:00am to 9:10am
9:10am to 9:20am E1
9:20am to 9:30am E1, E2
9:30am to 10:00am E2
10:00am to 10:10am E2
10:10am to 11:00am E3
11:00am to 12:pm

Это мой код для достижения этой цели, наиболее оптимизированный, который я мог получить, но проблема в том, что у меня миллионы строк в ShiftRange, и текущее время выполнения неприемлемо, есть ли способ дальнейшей оптимизации:
protected override IEnumerable Join(Query query, IEnumerable shiftRange, IEnumerable applyRecords)
{
var state = this.GetState(query);
var applyRecordsCached = applyRecords.ToArray();

foreach (var split in splitRecords)
{
var activeList = new LinkedList();
activeList.AddLast(split);

foreach (var apply in applyRecordsCached)
{
foreach (var current in activeList.ToList())
{
// Apply split logic and replace nodes in-place
activeList.Remove(current);
var parts = current.Split(apply); //the Split function returns before, during and after for the event
if (parts.Item1 != null) activeList.AddLast(parts.Item1);
if (parts.Item2 != null) activeList.AddLast(this.ApplyRecord(apply, parts.Item2, state)); //the ApplyRecord function attaches the apply record to shift range
if (parts.Item3 != null) activeList.AddLast(parts.Item3);
}
}

// Emit all remaining parts in order
foreach (var remainingSplit in activeList)
{
yield return remainingSplit;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ed-on-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»