Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Speed of C# lists

Tags:

c#

oop

Are C# lists fast? What are the good and bad sides of using lists to handle objects?

Extensive use of lists will make software slower? What are the alternatives to lists in C#?

How many objects is "too many objects" for lists?

like image 713
George Silva Avatar asked Sep 16 '09 14:09

George Silva


People also ask

Why is speed of light c?

Speed of light is now universally represented by symbol 'c'. This symbol originated from the initial letter of the Latin word “celerity” meaning “swift” or “quick”. This symbol was used by Weber and Kohlrausch in their papers in 1856.

What is the speed of light 3x10 8?

Speed of light in air is 3×108 m/s and speed of light in common glass is 2*10^8 m/s. Calculate the refractive index of glass. Answer: The glass refractive index is defined as the ratio between the speed of light in the vacuum and the speed of light in the glass.

Is c always the speed of light?

The metre is the length of the path travelled by light in vacuum during a time interval of 1/299 792 458 of a second. This defines the speed of light in vacuum to be exactly 299,792,458 m/s. This provides a very short answer to the question "Is c constant": Yes, c is constant by definition!


2 Answers

List<T> uses a backing array to hold items:

  • Indexer access (i.e. fetch/update) is O(1)
  • Remove from tail is O(1)
  • Remove from elsewhere requires existing items to be shifted up, so O(n) effectively
  • Add to end is O(1) unless it requires resizing, in which case it's O(n). (This doubles the size of the buffer, so the amortized cost is O(1).)
  • Add to elsewhere requires existing items to be shifted down, so O(n) effectively
  • Finding an item is O(n) unless it's sorted, in which case a binary search gives O(log n)

It's generally fine to use lists fairly extensively. If you know the final size when you start populating a list, it's a good idea to use the constructor which lets you specify the capacity, to avoid resizing. Beyond that: if you're concerned, break out the profiler...

like image 78
Jon Skeet Avatar answered Oct 05 '22 02:10

Jon Skeet


Compared to what?

  • If you mean List<T>, then that is essentially a wrapper around an array; so fast to read/write by index, relatively fast to append (since it allows extra space at the end, doubling in size when necessary) and remove from the end, but more expensive to do other operations (insert/delete other than the end)
  • An array is again fast by index, but fixed size (no append/delete)
  • Dictionary<,> etc offer better access by key

A list isn't intrinsically slow; especially if you know you always need to look at all the data, or can access it by index. But for large lists it may be better (and more convenient) to search via a key. There are various dictionary implementations in .NET, each with different costs re size / performance.

like image 33
Marc Gravell Avatar answered Oct 05 '22 03:10

Marc Gravell