I am having performance problem when truing to fill typed list. Below is my simplified code:

```
         public static List<Product> GetProducts()
         {
         List<Product> products = new List<Product>();            
         using (DbQuery query = new DbQuery()) //this is database access class
         {

            query.CommandText = "SELECT ProdID, ProdName,Price FROM SomeTable " ;+

            using (IDataReader rdr = query.ExecuteReader())
            {
               while (rdr.Read())
               {
                  Product prd = new Product();
                  prd.ProdID = DbQuery.ReadInt ( rdr, "ProdID", -1 );
                  prd.ProdName = DbQuery.ReadString(rdr, "ProdName", "");
                  prd.Price = DbQuery.ReadDouble(rdr, "Price", 0);
                  products.Add(prd);
               }
            }
         }
         } 

```

I also have simple struct Product (ProdID, ProdName,Price).

my problem is that it takes 4 seconds to execute GetProducts(). The query returns about 600 records and it takes miliseconds to return result, so I am perrty sure that filling up products collection takes all this time. Am I doing something inefficient here? Please, help.
Thanks,
Gerda
['https://Stackoverflow.com/questions/1569238', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/190204/']
As Justin recommends, I personally would start commenting out sections of code until I found what was causing the bottleneck. For example, I might start by making the routine only run the database-centric code:

```
public static List<Product> GetProducts()
        {
            List<Product> products = new List<Product>();

            using (DbQuery query = new DbQuery())
            {
                query.CommandText = "SELECT ProdID, ProdName,Price FROM SomeTable ";

                using (IDataReader rdr = query.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        //Product prd = new Product();
                        //prd.ProdID = DbQuery.ReadInt(rdr, "ProdID", -1);
                        //prd.ProdName = DbQuery.ReadString(rdr, "ProdName", "");
                        //prd.Price = DbQuery.ReadDouble(rdr, "Price", 0);
                        //products.Add(prd);
                    }
                }
            }

            return products;
        }

```

By commenting out the section which creates the Product objects and adds them to the list, I can see how fast the database related code runs. If that runs quicker then 4 seconds then I know that it's something to do with the Product object creation and/or the calls to DBQuery which are taking a long time to complete.

It's trial and error, but since this routine if very simple, it should not take long to do this type of analysis.
Just from the sounds of it, this has to be a database performance or latency issue (if connecting remotely.)