В основном этот тип медлительности происходит из-за этой ошибки:
for (var i = 0; i<100; i++)
{
// do a network-roundtrip/remoting/io/etc
}
, и решение состоит в том, чтобы изменить его на:
// do a network-roundtrip/remoting/io/etc
for (var i = 0; i<100; i++)
{
// do something with the result of the above call
}
Так что, если я вас правильно понял, данные Global.holidayGlobals.Values
поступают из другого процесса, например кеша памяти. Если это так, то вам проще всего изменить код на:
int limit=450;
public bool functionUI()
{
var holidays = Global.holidayGlobals.Values;
for(int i=0;i< limit ; i++)
{
functionApp(i, holidays);
}
}
public static bool functionApp(int i, IEnumerable<HolidayEntity> holidays)
{
foreach(var h in holidays)
{
if(h.Value == i)
{
return false;
}
}
return true;
}
Мы все еще делаем слишком много работы в циклах (мы можем улучшить алгоритм, создав словарь и просто просмотрев его), но для вашего числа (450) это ничтожно мало по сравнению со временем одного обхода в кэш-память.
UPDATE
Из комментариев к вопросу видно, что holidays
равно Dictionary<int, HolidayEntity>
, если это так, код может стать намного лучше, как это:
public bool functionUI()
{
var holidays = Global.holidayGlobals.Values;
for(int i=0;i< limit ; i++)
{
functionApp(i, holidays);
}
}
public static bool functionApp(int i, IEnumerable<HolidayEntity> holidays)
{
if (holidays.TryGetValue(i, out var h))
{
return false;
}
return true;
}