Catalin Adler
Catalin Adler

Reputation: 35

Fastest .net data structure for parallel search

Let's say we have a big read only list of (int, string) elements.

What would be the fastest way to get an item from that list?

I know a generic dictionary is fast, but as far as I know it uses only 1 cpu, and today's computers have at least 2 cpu's.

As a side question: what would be the fastest solution to search this collection for multiple items? For example collection.GetItems(new int[]{1,2,3,4}), where 1,2,3,4 are the keys.

Thanks!

Upvotes: 1

Views: 458

Answers (1)

bryanmac
bryanmac

Reputation: 39296

A dictionary uses hash tables which should ammortize to O(1). Computing the hash on the keys should be very fast and the hash lookup is a direct array memory offset and hopefully walking a very short collision chain.

Therefore I would not recommend optimizing the lookups unless a dictionary does not serve your needs and it's too slow. You could argue that there's a processor sitting there going to waste but trying to leverage that processor to optimize a problem that may not exist will complicate your code.

I would recommend maintaining a lookup dictionary and for each lookups.

The only consideration is memory. A dictionary will add a memory footprint to make the lookups fast - typical space vs. time.

If you need to keep memory low and you need faster lookups and you have more processing power (multi-core), then maybe.

In that case, I would recommend you look into the task parallel library. Here's an article: http://www.codeproject.com/KB/cs/TPL1.aspx

Upvotes: 2

Related Questions