using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
namespace ConsoleApplicationTestList
public int Id { get; set; }
public string Descricao { get; set; }
public int Quantidade { get; set; }
public decimal ValorUnitario { get; set; }
public decimal ValorTotal { get; set; }
public Produto(int ID, string descricao, int quantidade)
this.Descricao = descricao;
this.Quantidade = quantidade;
static List<Produto> montaListaProdutos(int quantidadeProdutos)
List<Produto> listaProdutos = new List<Produto>();
for (int i = 1; i <= quantidadeProdutos; i++)
Produto p = new Produto( i , "produto " + i.ToString(), i);
public static void Main(string[] args)
List<Produto> minhaLista = montaListaProdutos(10000);
Stopwatch medidor = new Stopwatch();
for (int i = 0; i < minhaLista.Count ; i++)
if (idprocurado == minhaLista[i].Id)
minhaLista[i].Quantidade = 20;
Console.WriteLine("tempo gasto me milisegundos: " + medidor.ElapsedMilliseconds + "ms");
Stopwatch medidorForeach = new Stopwatch();
foreach (Produto item in minhaLista)
if (idprocurado == item.Id)
Console.WriteLine("tempo gasto me milisegundos com o foreach: " + medidorForeach.ElapsedMilliseconds + "ms");
Stopwatch medidorParalelo = new Stopwatch();
Parallel.ForEach(minhaLista,
if (idprocurado == item.Id)
Console.WriteLine("tempo gasto em milisegundos com paralelismo: " + medidorParalelo.ElapsedMilliseconds + "ms");
Stopwatch medidorFind = new Stopwatch();
Produto result = minhaLista.Find(x => x.Id == idprocurado);
Console.WriteLine("tempo gasto me milisegundos com o find: " + medidorFind.ElapsedMilliseconds + "ms");