Skip to content

Instantly share code, notes, and snippets.

@s2kw
Last active August 29, 2015 13:56
Show Gist options
  • Save s2kw/9204120 to your computer and use it in GitHub Desktop.
Save s2kw/9204120 to your computer and use it in GitHub Desktop.
WhereFirst vs First vs foreach
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
namespace ConsoleApplication
{
class Program{
private const int internalIterations = 1000;
private const int externalIterations = 100;
private const int dataSize = 1000;//100000;
private const int search = dataSize - 1;
private static readonly long[] resultsFirst = new long[externalIterations*2];
private static readonly long[] resultsWhereFirst = new long[externalIterations*2];
private static readonly long[] resultsForeach = new long[externalIterations*2];
private static readonly int[] data = Enumerable.Range(0, dataSize).ToArray();
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
for (int i = 0; i < externalIterations; i++)
{
Console.WriteLine("Iteration {0} of {1}", i+1, externalIterations);
sw.Restart();
First();
sw.Stop();
resultsFirst[i*2] = sw.ElapsedTicks;
Console.WriteLine(" First : {0}", sw.ElapsedTicks);
sw.Restart();
WhereFirst();
sw.Stop();
resultsWhereFirst[i*2] = sw.ElapsedTicks;
Console.WriteLine("WhereFirst : {0}", sw.ElapsedTicks);
sw.Restart();
Foreach();
sw.Stop();
resultsForeach[i*2] = sw.ElapsedTicks;
Console.WriteLine(" Foreach : {0}", sw.ElapsedTicks);
sw.Restart();
Foreach();
sw.Stop();
resultsForeach[i*2+1] = sw.ElapsedTicks;
Console.WriteLine(" Foreach : {0}", sw.ElapsedTicks);
sw.Restart();
WhereFirst();
sw.Stop();
resultsWhereFirst[(i*2)+1] = sw.ElapsedTicks;
Console.WriteLine("WhereFirst : {0}", sw.ElapsedTicks);
sw.Restart();
First();
sw.Stop();
resultsFirst[(i*2)+1] = sw.ElapsedTicks;
Console.WriteLine(" First : {0}", sw.ElapsedTicks);
}
Console.WriteLine("Done!");
Console.WriteLine("Averages:");
Console.WriteLine(" First Average: {0:0.00}", resultsFirst.Average());
Console.WriteLine("WhereFirst Average: {0:0.00}", resultsWhereFirst.Average());
Console.WriteLine(" Foreach Average: {0:0.00}", resultsForeach.Average());
}
private static void WhereFirst()
{
for (int i = 0; i < internalIterations; i++)
{
int item = data.Where(d => d == search).First();
}
}
private static void First()
{
for (int i = 0; i < internalIterations; i++)
{
int item = data.First(d => d == search);
}
}
private static void Foreach()
{
for (int i = 0; i < internalIterations; i++)
foreach (var d in data )
{
int item = d;
// ver 2
if(item == (internalIterations -1 ))
break;
}
}
}
}
@s2kw
Copy link
Author

s2kw commented Feb 25, 2014

@s2kw
Copy link
Author

s2kw commented Feb 25, 2014

Iteration 1 of 100
First : 773163
WhereFirst : 176654
Foreach : 143957
Foreach : 106777
WhereFirst : 188297
First : 645112
Iteration 2 of 100
First : 600458
WhereFirst : 182202
Foreach : 152810
Foreach : 137837
WhereFirst : 201488
First : 458041
Iteration 3 of 100
First : 445980
WhereFirst : 138133
Foreach : 120793
Foreach : 85347
WhereFirst : 142946
First : 425347
Iteration 4 of 100
First : 540096
WhereFirst : 164882
Foreach : 89107
Foreach : 138837
WhereFirst : 156865
First : 558647
Iteration 5 of 100
First : 463934
WhereFirst : 153400
Foreach : 85652
Foreach : 95920
WhereFirst : 283562
First : 726952
Iteration 6 of 100
First : 793577
WhereFirst : 749294
Foreach : 185285
Foreach : 240924
WhereFirst : 498752
First : 900280
Iteration 7 of 100
First : 680365
WhereFirst : 270400
Foreach : 117574
Foreach : 118932
WhereFirst : 194382
First : 439917
Iteration 8 of 100
First : 435836
WhereFirst : 148603
Foreach : 82781
Foreach : 73090
WhereFirst : 127624
First : 360335
Iteration 9 of 100
First : 469974
WhereFirst : 159712
Foreach : 128845
Foreach : 81129
WhereFirst : 137366
First : 527357
Iteration 10 of 100
First : 515976
WhereFirst : 178526
Foreach : 91033
Foreach : 119789
WhereFirst : 224435
First : 779932
Iteration 11 of 100
First : 718968
WhereFirst : 171285
Foreach : 93158
Foreach : 79997
WhereFirst : 189024
First : 992171
Iteration 12 of 100
First : 740315
WhereFirst : 163797
Foreach : 110819
Foreach : 93119
WhereFirst : 193026
First : 551931
Iteration 13 of 100
First : 516030
WhereFirst : 142718
Foreach : 74880
Foreach : 67905
WhereFirst : 147182
First : 453466
Iteration 14 of 100
First : 507529
WhereFirst : 194041
Foreach : 133347
Foreach : 94014
WhereFirst : 145066
First : 1139024
Iteration 15 of 100
First : 468215
WhereFirst : 200451
Foreach : 101053
Foreach : 100359
WhereFirst : 182021
First : 547980
Iteration 16 of 100
First : 1119739
WhereFirst : 152816
Foreach : 84121
Foreach : 84448
WhereFirst : 190204
First : 545332
Iteration 17 of 100
First : 679252
WhereFirst : 203143
Foreach : 144845
Foreach : 115969
WhereFirst : 154423
First : 496300
Iteration 18 of 100
First : 382170
WhereFirst : 115611
Foreach : 66798
Foreach : 66041
WhereFirst : 139169
First : 457778
Iteration 19 of 100
First : 410652
WhereFirst : 134046
Foreach : 68731
Foreach : 67325
WhereFirst : 155890
First : 447432
Iteration 20 of 100
First : 358975
WhereFirst : 140033
Foreach : 77284
Foreach : 91707
WhereFirst : 122714
First : 460060
Iteration 21 of 100
First : 511413
WhereFirst : 156779
Foreach : 151541
Foreach : 69231
WhereFirst : 114315
First : 376124
Iteration 22 of 100
First : 386372
WhereFirst : 130382
Foreach : 98949
Foreach : 85517
WhereFirst : 131203
First : 420170
Iteration 23 of 100
First : 577466
WhereFirst : 123487
Foreach : 90829
Foreach : 90294
WhereFirst : 197542
First : 475623
Iteration 24 of 100
First : 391286
WhereFirst : 120548
Foreach : 70541
Foreach : 84640
WhereFirst : 149263
First : 446933
Iteration 25 of 100
First : 379472
WhereFirst : 118036
Foreach : 118612
Foreach : 77651
WhereFirst : 142463
First : 405534
Iteration 26 of 100
First : 429870
WhereFirst : 128234
Foreach : 81454
Foreach : 106131
WhereFirst : 149882
First : 434464
Iteration 27 of 100
First : 435930
WhereFirst : 120407
Foreach : 84494
Foreach : 106989
WhereFirst : 151416
First : 418562
Iteration 28 of 100
First : 420227
WhereFirst : 124013
Foreach : 83180
Foreach : 113239
WhereFirst : 194300
First : 486115
Iteration 29 of 100
First : 433673
WhereFirst : 132793
Foreach : 100039
Foreach : 117825
WhereFirst : 130193
First : 408360
Iteration 30 of 100
First : 462838
WhereFirst : 163283
Foreach : 68439
Foreach : 411152
WhereFirst : 176655
First : 472263
Iteration 31 of 100
First : 425613
WhereFirst : 132595
Foreach : 107482
Foreach : 101488
WhereFirst : 123956
First : 409883
Iteration 32 of 100
First : 378770
WhereFirst : 135266
Foreach : 97934
Foreach : 94952
WhereFirst : 147240
First : 437159
Iteration 33 of 100
First : 426123
WhereFirst : 151327
Foreach : 77275
Foreach : 88911
WhereFirst : 135568
First : 479765
Iteration 34 of 100
First : 377383
WhereFirst : 135043
Foreach : 118894
Foreach : 103816
WhereFirst : 161721
First : 512651
Iteration 35 of 100
First : 379162
WhereFirst : 115119
Foreach : 69890
Foreach : 74106
WhereFirst : 128140
First : 408433
Iteration 36 of 100
First : 467074
WhereFirst : 150497
Foreach : 77921
Foreach : 135896
WhereFirst : 168470
First : 397510
Iteration 37 of 100
First : 392107
WhereFirst : 131563
Foreach : 78604
Foreach : 90484
WhereFirst : 129970
First : 615269
Iteration 38 of 100
First : 423370
WhereFirst : 119116
Foreach : 98126
Foreach : 81098
WhereFirst : 137593
First : 461116
Iteration 39 of 100
First : 456270
WhereFirst : 123776
Foreach : 83190
Foreach : 81267
WhereFirst : 160954
First : 531925
Iteration 40 of 100
First : 386184
WhereFirst : 111854
Foreach : 66689
Foreach : 70638
WhereFirst : 156376
First : 384652
Iteration 41 of 100
First : 419348
WhereFirst : 121865
Foreach : 69877
Foreach : 69080
WhereFirst : 122097
First : 424482
Iteration 42 of 100
First : 457209
WhereFirst : 134700
Foreach : 73471
Foreach : 91170
WhereFirst : 138729
First : 521700
Iteration 43 of 100
First : 399846
WhereFirst : 179873
Foreach : 70742
Foreach : 84068
WhereFirst : 146151
First : 407472
Iteration 44 of 100
First : 445881
WhereFirst : 115352
Foreach : 96441
Foreach : 70127
WhereFirst : 118710
First : 403459
Iteration 45 of 100
First : 620296
WhereFirst : 215393
Foreach : 69916
Foreach : 67461
WhereFirst : 128395
First : 412950
Iteration 46 of 100
First : 396655
WhereFirst : 141196
Foreach : 88674
Foreach : 79510
WhereFirst : 148843
First : 411796
Iteration 47 of 100
First : 388902
WhereFirst : 127701
Foreach : 93506
Foreach : 71970
WhereFirst : 126095
First : 439429
Iteration 48 of 100
First : 393187
WhereFirst : 132117
Foreach : 67197
Foreach : 74801
WhereFirst : 127606
First : 396578
Iteration 49 of 100
First : 371858
WhereFirst : 143482
Foreach : 86994
Foreach : 67553
WhereFirst : 112313
First : 453242
Iteration 50 of 100
First : 388950
WhereFirst : 120512
Foreach : 135368
Foreach : 91080
WhereFirst : 170564
First : 386466
Iteration 51 of 100
First : 416947
WhereFirst : 127102
Foreach : 70442
Foreach : 96610
WhereFirst : 128636
First : 426758
Iteration 52 of 100
First : 359799
WhereFirst : 127014
Foreach : 78387
Foreach : 88145
WhereFirst : 114160
First : 413023
Iteration 53 of 100
First : 600935
WhereFirst : 144398
Foreach : 80196
Foreach : 82477
WhereFirst : 131764
First : 418601
Iteration 54 of 100
First : 379208
WhereFirst : 133506
Foreach : 92555
Foreach : 80950
WhereFirst : 165690
First : 418515
Iteration 55 of 100
First : 398735
WhereFirst : 113884
Foreach : 101106
Foreach : 115642
WhereFirst : 141932
First : 405061
Iteration 56 of 100
First : 435307
WhereFirst : 119444
Foreach : 70388
Foreach : 68482
WhereFirst : 153941
First : 478397
Iteration 57 of 100
First : 442827
WhereFirst : 124521
Foreach : 74706
Foreach : 84565
WhereFirst : 178454
First : 451898
Iteration 58 of 100
First : 404619
WhereFirst : 133152
Foreach : 78414
Foreach : 108288
WhereFirst : 219981
First : 404867
Iteration 59 of 100
First : 448959
WhereFirst : 143340
Foreach : 71500
Foreach : 68704
WhereFirst : 127056
First : 410895
Iteration 60 of 100
First : 423838
WhereFirst : 126267
Foreach : 93197
Foreach : 80826
WhereFirst : 114024
First : 624928
Iteration 61 of 100
First : 386153
WhereFirst : 182219
Foreach : 147425
Foreach : 79232
WhereFirst : 117184
First : 423327
Iteration 62 of 100
First : 391552
WhereFirst : 121192
Foreach : 90483
Foreach : 117893
WhereFirst : 137049
First : 438802
Iteration 63 of 100
First : 371910
WhereFirst : 122878
Foreach : 67557
Foreach : 95880
WhereFirst : 171158
First : 421814
Iteration 64 of 100
First : 472209
WhereFirst : 154920
Foreach : 79847
Foreach : 113497
WhereFirst : 135964
First : 426370
Iteration 65 of 100
First : 441608
WhereFirst : 161409
Foreach : 78503
Foreach : 77123
WhereFirst : 140367
First : 358012
Iteration 66 of 100
First : 432679
WhereFirst : 117098
Foreach : 87152
Foreach : 75824
WhereFirst : 128796
First : 417681
Iteration 67 of 100
First : 423955
WhereFirst : 169651
Foreach : 107165
Foreach : 72587
WhereFirst : 128128
First : 448498
Iteration 68 of 100
First : 658409
WhereFirst : 162343
Foreach : 77768
Foreach : 86787
WhereFirst : 121311
First : 448565
Iteration 69 of 100
First : 464865
WhereFirst : 119092
Foreach : 95016
Foreach : 117232
WhereFirst : 123357
First : 402479
Iteration 70 of 100
First : 451316
WhereFirst : 129195
Foreach : 77756
Foreach : 80695
WhereFirst : 128543
First : 354510
Iteration 71 of 100
First : 499987
WhereFirst : 195857
Foreach : 108528
Foreach : 113553
WhereFirst : 123234
First : 432442
Iteration 72 of 100
First : 438614
WhereFirst : 164590
Foreach : 102152
Foreach : 84132
WhereFirst : 156023
First : 451548
Iteration 73 of 100
First : 488502
WhereFirst : 132389
Foreach : 98766
Foreach : 71194
WhereFirst : 126989
First : 491956
Iteration 74 of 100
First : 392545
WhereFirst : 114602
Foreach : 74423
Foreach : 89249
WhereFirst : 152061
First : 385073
Iteration 75 of 100
First : 376743
WhereFirst : 161052
Foreach : 112322
Foreach : 290811
WhereFirst : 182319
First : 504597
Iteration 76 of 100
First : 448877
WhereFirst : 127174
Foreach : 87346
Foreach : 81734
WhereFirst : 116570
First : 455140
Iteration 77 of 100
First : 417441
WhereFirst : 126986
Foreach : 104513
Foreach : 82401
WhereFirst : 119234
First : 375870
Iteration 78 of 100
First : 405501
WhereFirst : 156172
Foreach : 76456
Foreach : 87996
WhereFirst : 123638
First : 482323
Iteration 79 of 100
First : 475649
WhereFirst : 125796
Foreach : 76823
Foreach : 91450
WhereFirst : 128181
First : 432789
Iteration 80 of 100
First : 366482
WhereFirst : 136466
Foreach : 94989
Foreach : 89745
WhereFirst : 137529
First : 489967
Iteration 81 of 100
First : 375051
WhereFirst : 138718
Foreach : 95486
Foreach : 88249
WhereFirst : 158962
First : 417583
Iteration 82 of 100
First : 419533
WhereFirst : 131650
Foreach : 74147
Foreach : 79049
WhereFirst : 159875
First : 377966
Iteration 83 of 100
First : 566157
WhereFirst : 203065
Foreach : 73113
Foreach : 83602
WhereFirst : 119583
First : 483121
Iteration 84 of 100
First : 419853
WhereFirst : 135092
Foreach : 88446
Foreach : 95818
WhereFirst : 119791
First : 374080
Iteration 85 of 100
First : 452840
WhereFirst : 174094
Foreach : 110534
Foreach : 88195
WhereFirst : 116132
First : 409514
Iteration 86 of 100
First : 396748
WhereFirst : 128033
Foreach : 75542
Foreach : 135732
WhereFirst : 142864
First : 431417
Iteration 87 of 100
First : 407867
WhereFirst : 183315
Foreach : 82775
Foreach : 125372
WhereFirst : 131365
First : 466288
Iteration 88 of 100
First : 424175
WhereFirst : 170717
Foreach : 126750
Foreach : 83948
WhereFirst : 126160
First : 464005
Iteration 89 of 100
First : 437726
WhereFirst : 144935
Foreach : 129577
Foreach : 73044
WhereFirst : 119201
First : 405009
Iteration 90 of 100
First : 494308
WhereFirst : 434576
Foreach : 77823
Foreach : 91399
WhereFirst : 132221
First : 416444
Iteration 91 of 100
First : 395304
WhereFirst : 123657
Foreach : 67226
Foreach : 82121
WhereFirst : 117019
First : 435072
Iteration 92 of 100
First : 456847
WhereFirst : 128384
Foreach : 71469
Foreach : 67105
WhereFirst : 118205
First : 442425
Iteration 93 of 100
First : 457065
WhereFirst : 137762
Foreach : 76550
Foreach : 70951
WhereFirst : 113454
First : 814498
Iteration 94 of 100
First : 695384
WhereFirst : 147528
Foreach : 74108
Foreach : 72943
WhereFirst : 115233
First : 429125
Iteration 95 of 100
First : 355490
WhereFirst : 141553
Foreach : 73106
Foreach : 73688
WhereFirst : 135535
First : 424741
Iteration 96 of 100
First : 504701
WhereFirst : 148151
Foreach : 74534
Foreach : 77008
WhereFirst : 140017
First : 462533
Iteration 97 of 100
First : 1048663
WhereFirst : 302946
Foreach : 154750
Foreach : 149597
WhereFirst : 205385
First : 477346
Iteration 98 of 100
First : 634287
WhereFirst : 325234
Foreach : 226727
Foreach : 222998
WhereFirst : 373013
First : 758521
Iteration 99 of 100
First : 826096
WhereFirst : 286328
Foreach : 266572
Foreach : 275666
WhereFirst : 291363
First : 757948
Iteration 100 of 100
First : 582984
WhereFirst : 248597
Foreach : 137802
Foreach : 128625
WhereFirst : 203762
First : 652930
Done!
Averages:
First Average: 480299.70
WhereFirst Average: 157088.36
Foreach Average: 98462.43

Press any key to continue...

@s2kw
Copy link
Author

s2kw commented Feb 25, 2014

foreachの中で何もしてなかったのがコンパイル時に削除される可能性を指摘頂いたのでif文を追加したv2をup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment