Enumerating a SPListItemCollection object should be avoided for data querying purposes.

for e.g. in the following code is not optimal,

using(SPSite site = new SPSite(siteURL))
{
   using(SPWeb web = site.OpenWeb())
   {
      SPList tasksList = web.Lists["Tasks"];
      foreach(SPListItem item in tasksList.Items)
      {
         // Code
      }

   }
}

This is because each step will invoke a separate call to the DB. Instead the foreach loop should be used on a DataTable object which can derived as mentioned below. This will reduce multiple calls to the content DB with just one.

DataTable dt = tasksList.Items.GetDataTable();
foreach(DataRow dr in dt.Rows)
{
   //code
}