Which is Faster? Union versus Concat6:57 with Carling Kirk
Let's pit the Union and Concat/Distinct operators we saw earlier and find out which is faster!
Earlier we compared the source code for 0:00 performing a union versus performing a concat and a distinct. 0:02 Union looks over two different sequences and attempts to see if 0:06 each element already exists before adding it to a newer numerable and 0:09 the concat looks over two sequences mashing it into one and 0:14 then a distinct will iterate over the result and take out the duplicates. 0:18 I'll be using workspaces to do this exercise instead of the C#. 0:22 You should follow along with me. 0:26 First here in the Main method we'll need two innumerables of a bunch of integers. 0:29 We can use that Innumerable.Range to produce them for us. 0:35 We can jam a bunch of numbers in them so we'll have a big list Var listA = 0:39 Enumerable.Range. 0:44 We'll go from zero and we'll give it, I don't know, 100,000 numbers. 0:47 All right, we'll need another list, var listB = Enumerable.Range. 0:56 And this time, we'll start halfway, 50,000, 1:06 but we'll also give it 100,000 numbers. 1:09 All right, big lists. 1:14 So there's a neat little tool here in the System.Diagnostics 1:16 namespace of the .NET framework called Stopwatch. 1:21 We can use it to time our queries so we can find out which one is faster. 1:24 It's an instance class so we'll need to instantiate a first. 1:28 Stopwatch, we'll call it stopwatch, equals new stopwatch. 1:32 And then we'll call Stopwatch.start so that I'll start our stopwatch. 1:42 Then we can do the unions so, if I will create another list, listC 1:51 equals listA.Union Of listB. 1:58 Then we need to stop the stopwatch, stopwatch.Stop. 2:08 All right, we'll need to store the elapsed time in a new variable. 2:15 We'll call it union ticks Equals 2:19 stopwatch.elapsedticks. 2:26 I'm using the elapsed ticks property of the stopwatch object because a tick is 2:33 much smaller than a millisecond A tick is 10,000 milliseconds. 2:38 Our queries will probably run really fast, so 2:42 using ticks will be easier for us to digest. 2:46 We'll need to reset the stopwatch. 2:49 We can call stopwatch.Restart. 2:51 stopwatch. 2:56 Restart and that actually performs a stop and 2:57 a start in the same things so now we can do our con-cat so 3:03 we'll make another list called List D 3:10 equals List A dot con-cat list B. 3:15 And then we need to do the distinct so it's the same operation. 3:20 Removing the duplicate, okay. 3:24 Then we'll stop the stopwatch again. 3:26 Then we'll create another variable to hold the amount of time that that took. 3:32 So we'll say var ConcatTicks equals 3:37 stopwatch.ElapsedTicks. 3:42 Right now we've got our two variables that hold the amount of time 3:49 each operation took. 3:52 Let's write the values to the console, Console.rightline, 3:54 string.Format Union, 4:01 our first operation, took that many ticks. 4:09 All right, then we'll pass at the union ticks variable. 4:16 Okay, and we'll do the same thing. 4:22 I'll do a copy Ctrl+C and then I paste with Ctrl+V. 4:24 And here for union we'll do Concat and 4:30 then we'll replace unionTicks with concatTicks. 4:35 Alright. 4:41 Well, and then because we're lazy, 4:42 let's make the program compare the two values for 4:44 us and tell us which one is faster so that we don't have to do the math in our head. 4:47 So if. 4:53 Union ticks is greater than can catch ticks. 4:58 Then we'll write out console.writeline. 5:04 So concat would be faster here. 5:13 So concat is faster by so 5:14 many ticks. 5:20 And will pass it, the result of unionTicks because 5:25 that would be greater minus concatTicks. 5:30 Okay. 5:37 Then, otherwise else if 5:40 concatTicks is greater than unionTicks. 5:45 Then We'll copy and paste again. 5:53 Control C and control V. 5:59 Union would be faster, and got a type-o there. 6:02 Then we would Subtract 6:09 unionTicks from concatTicks and write that to the console. 6:14 All right, do you see any typos? 6:20 Let's compile.mcs Program.cs. 6:22 Okay, just some warnings. 6:28 Then we'll run with mono programme.exe. 6:30 All right union is faster by only 3, 000 ticks. 6:36 We saw earlier that union iterated two times but the concat and 6:43 distinct iterated a total of three times. 6:47 So the more times a sequence is iterated over, 6:50 the more time it will take to perform the operation. 6:53
You need to sign up for Treehouse in order to download course files.Sign up