fork download
  1. using System;
  2. using static System.Console;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Diagnostics;
  6.  
  7. public class Pessoa {
  8. public string Nome { get; set; }
  9. public DateTime? DataNascimento { get; set; }
  10. public int? Cpf { get; set; }
  11.  
  12. public Pessoa(string nome, DateTime? dataNascimento = null, int? cpf = null){
  13. Nome = nome;
  14. DataNascimento = dataNascimento;
  15. Cpf = cpf;
  16. }
  17. }
  18.  
  19. public class App {
  20. public static void Main(string[] args) {
  21. var limiteDeItens = 1_000_000;
  22. var pessoas = new List<Pessoa>(limiteDeItens);
  23. var tempo = new Stopwatch();
  24. tempo.Start();
  25. //preenche a lista
  26. for(var i = 0; i < limiteDeItens; i++) {
  27. pessoas.Add(new Pessoa("Pessoa" + i.ToString()));
  28. }
  29. tempo.Stop();
  30. WriteLine($"Preencher a lista em ms: {tempo.ElapsedMilliseconds}");
  31. // LINQ na forma declarativa
  32. tempo.Restart();
  33. var resultado1 = from pessoa in pessoas
  34. where pessoa.Nome.Contains('9')
  35. select pessoa;
  36. tempo.Stop();
  37. WriteLine($"Montar o LINQ declarativo em Ticks: {tempo.ElapsedTicks}");
  38. // LINQ usando sintaxe tradicional
  39. tempo.Restart();
  40. var resultado2 = pessoas.Where(x => x.Nome.Contains('9'));
  41. tempo.Stop();
  42. WriteLine($"Montar o LINQ imperativo em Ticks: {tempo.ElapsedTicks}");
  43.  
  44. // transferir todo resultado para uma lista apenas para efeito de comparação
  45. var lista1 = new List<Pessoa>(limiteDeItens);
  46. tempo.Restart();
  47. foreach(var pessoa in resultado1) {
  48. lista1.Add(pessoa);
  49. }
  50. tempo.Stop();
  51. WriteLine($"Transferir uma lista para outra com a primeira expressão em ms: {tempo.ElapsedMilliseconds}");
  52. var lista2 = new List<Pessoa>(limiteDeItens);
  53. tempo.Restart();
  54. foreach(var pessoa in resultado2) {
  55. lista2.Add(pessoa);
  56. }
  57. tempo.Stop();
  58. WriteLine($"Transferir uma lista para outra com a segunda expressão em ms: {tempo.ElapsedMilliseconds}");
  59. }
  60. }
  61.  
  62. //https://pt.stackoverflow.com/q/14212/101
Time limit exceeded #stdin #stdout 15s 3249164KB
stdin
Standard input is empty
stdout
Standard output is empty