That's pretty tricky without having complete source code. Give us a
proper test harness and we can experiment appropriately.
Sure, as you can see i have isolated the important parts.
Paste in a new Console-app:
class Program
{
private static List<ConferenceRoom> rooms = new List<ConferenceRoom>
{
new ConferenceRoom{SeatingCapacity = 3},
new ConferenceRoom{SeatingCapacity = 5},
new ConferenceRoom{SeatingCapacity = 7},
new ConferenceRoom{SeatingCapacity = 9},
new ConferenceRoom{SeatingCapacity = 12}
};
static void Main(string[] args)
{
DateTime start = DateTime.Now;
for(int i = 0; i < 1000000; i++)
ForWithIf(8);
Console.WriteLine((DateTime.Now - start).Ticks);
Console.Read();
}
//Ca: 2 500 000 ticks
public static List<ConferenceRoom> ForeachTest(int
minimumSeatingCapacity)
{
List<ConferenceRoom> availableRooms = new List<ConferenceRoom>();
foreach (ConferenceRoom room in rooms)
{
if (room.SeatingCapacity >= minimumSeatingCapacity)
availableRooms.Add(room);
}
return availableRooms;
}
//Ca: 4 500 000 ticks
public static List<ConferenceRoom> LinqTest(int
minimumSeatingCapacity)
{
return (from room in rooms
where room.SeatingCapacity >= minimumSeatingCapacity
select room).ToList();
}
//Ca: 2 400 000 ticks
public static List<ConferenceRoom> FindAllTest(int
minimumSeatingCapacity)
{
return rooms.FindAll(delegate(ConferenceRoom room)
{
if (room.SeatingCapacity >= minimumSeatingCapacity)
return true;
return false;
});
}
//Ca: 1 800 000 ticks
public static List<ConferenceRoom> ForTest(int
minimumSeatingCapacity)
{
List<ConferenceRoom> list = new List<ConferenceRoom>();
for (int i = 0; i < rooms.Count; i++)
{
if (rooms
.SeatingCapacity >= minimumSeatingCapacity)
list.Add(rooms);
}
return list;
}
}
public class ConferenceRoom
{
private int seatingCapacity;
public int SeatingCapacity
{
get { return seatingCapacity; }
set { seatingCapacity = value; }
}
}