ConcurrentDictionary<TKey,TValue> Class
Represents a thread-safe collection of key/value pairs that can be accessed by multiple threads concurrently.
Namespace:
Assembly: mscorlib (in mscorlib.dll)System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>
C#
[SerializableAttribute][ComVisibleAttribute(false)][HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, ExternalThreading = true)] public class ConcurrentDictionary: IDictionary , ICollection >, IEnumerable > ,IEnumerable, IDictionary, ICollection, IReadOnlyDictionary , IReadOnlyCollection >
Type Parameters
TKey
The type of the keys in the dictionary.
TValue
The type of the values in the dictionary.
Name | Description | |
---|---|---|
Initializes a new instance of the ConcurrentDictionary<TKey,TValue> class that is empty, has the default concurrency level, has the default initial capacity, and uses the default comparer for the key type. | ||
Initializes a new instance of the ConcurrentDictionary<TKey,TValue> class that contains elements copied from the specified , has the default concurrency level, has the default initial capacity, and uses the default comparer for the key type. | ||
Initializes a new instance of the ConcurrentDictionary<TKey,TValue> class that contains elements copied from the specified has the default concurrency level, has the default initial capacity, and uses the specified . | ||
Initializes a new instance of the ConcurrentDictionary<TKey,TValue> class that is empty, has the default concurrency level and capacity, and uses the specified . | ||
Initializes a new instance of the ConcurrentDictionary<TKey,TValue> class that contains elements copied from the specified , and uses the specified . | ||
Initializes a new instance of the ConcurrentDictionary<TKey,TValue> class that is empty, has the specified concurrency level and capacity, and uses the default comparer for the key type. | ||
Initializes a new instance of the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> class that is empty, has the specified concurrency level, has the specified initial capacity, and uses the specified . |
Name | Description | |
---|---|---|
Gets the number of key/value pairs contained in the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>. | ||
Gets a value that indicates whether the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> is empty. | ||
Gets or sets the value associated with the specified key. | ||
Gets a collection containing the keys in the . | ||
Gets a collection that contains the values in the . |
Name | Description | |
---|---|---|
Adds a key/value pair to the ConcurrentDictionary<TKey,TValue> if the key does not already exist, or updates a key/value pair in the ConcurrentDictionary<TKey,TValue> by using the specified function if the key already exists. | ||
Uses the specified functions to add a key/value pair to the ConcurrentDictionary<TKey,TValue> if the key does not already exist, or to update a key/value pair in the ConcurrentDictionary<TKey,TValue> if the key already exists. | ||
Removes all keys and values from the ConcurrentDictionary<TKey,TValue>. | ||
Determines whether the ConcurrentDictionary<TKey,TValue> contains the specified key. | ||
Determines whether the specified object is equal to the current object.(Inherited from .) | ||
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from .) | ||
Returns an enumerator that iterates through the ConcurrentDictionary<TKey,TValue>. | ||
Serves as the default hash function. (Inherited from .) | ||
Adds a key/value pair to the ConcurrentDictionary<TKey,TValue> if the key does not already exist. | ||
Adds a key/value pair to the ConcurrentDictionary<TKey,TValue> by using the specified function, if the key does not already exist. | ||
Gets the of the current instance.(Inherited from .) | ||
Creates a shallow copy of the current .(Inherited from .) | ||
Copies the key and value pairs stored in the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> to a new array. | ||
Returns a string that represents the current object.(Inherited from .) | ||
Attempts to add the specified key and value to the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>. | ||
Attempts to get the value associated with the specified key from the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>. | ||
Attempts to remove and return the value that has the specified key from the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>. | ||
Compares the existing value for the specified key with a specified value, and if they are equal, updates the key with a third value. |
Name | Description | |
---|---|---|
Adds an item to the collection. | ||
Gets whether the contains an element with the specified key. | ||
Copies the elements of the to an array, starting at the specified array index. | ||
Removes the specified key/value pair from the collection. | ||
Adds the specified key and value to the . | ||
Removes the element with the specified key from the . | ||
Copies the elements of the to an array, starting at the specified array index. | ||
Adds the specified key and value to the dictionary. | ||
Gets whether the contains an element with the specified key. | ||
Provides a for the . | ||
Removes the element with the specified key from the . | ||
Returns an enumerator that iterates through the System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>. | ||
Gets a value indicating whether the is read-only. | ||
Gets a collection containing the keys in the . | ||
Gets a collection that contains the values in the . | ||
Gets a value indicating whether access to the is synchronized with the SyncRoot. | ||
Gets an object that can be used to synchronize access to the . This property is not supported. | ||
Gets a value indicating whether the has a fixed size. | ||
Gets a value indicating whether the is read-only. | ||
Gets or sets the value associated with the specified key. | ||
Gets an that contains the keys of the . | ||
Gets an that contains the values in the . |
Name | Description | |
---|---|---|
Overloaded. Applies an accumulator function over a sequence.(Defined by .) | ||
Overloaded. Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value.(Defined by .) | ||
Overloaded. Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value.(Defined by .) | ||
Determines whether all elements of a sequence satisfy a condition.(Defined by .) | ||
Overloaded. Determines whether a sequence contains any elements.(Defined by .) | ||
Overloaded. Determines whether any element of a sequence satisfies a condition.(Defined by .) | ||
Returns the input typed as .(Defined by .) | ||
Overloaded. Enables parallelization of a query.(Defined by .) | ||
Overloaded. Enables parallelization of a query.(Defined by .) | ||
Overloaded. Converts an to an .(Defined by .) | ||
Overloaded. Converts a generic to a generic .(Defined by .) | ||
Overloaded. Computes the average of a sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the average of a sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Casts the elements of an to the specified type.(Defined by .) | ||
Concatenates two sequences.(Defined by .) | ||
Overloaded. Determines whether a sequence contains a specified element by using the default equality comparer.(Defined by .) | ||
Overloaded. Determines whether a sequence contains a specified element by using a specified .(Defined by .) | ||
Overloaded. Returns the number of elements in a sequence.(Defined by .) | ||
Overloaded. Returns a number that represents how many elements in the specified sequence satisfy a condition.(Defined by .) | ||
Overloaded. Returns the elements of the specified sequence or the type parameter's default value in a singleton collection if the sequence is empty.(Defined by .) | ||
Overloaded. Returns the elements of the specified sequence or the specified value in a singleton collection if the sequence is empty.(Defined by .) | ||
Overloaded. Returns distinct elements from a sequence by using the default equality comparer to compare values.(Defined by .) | ||
Overloaded. Returns distinct elements from a sequence by using a specified to compare values.(Defined by .) | ||
Returns the element at a specified index in a sequence.(Defined by .) | ||
Returns the element at a specified index in a sequence or a default value if the index is out of range.(Defined by .) | ||
Overloaded. Produces the set difference of two sequences by using the default equality comparer to compare values.(Defined by .) | ||
Overloaded. Produces the set difference of two sequences by using the specified to compare values.(Defined by .) | ||
Overloaded. Returns the first element of a sequence.(Defined by .) | ||
Overloaded. Returns the first element in a sequence that satisfies a specified condition.(Defined by .) | ||
Overloaded. Returns the first element of a sequence, or a default value if the sequence contains no elements.(Defined by .) | ||
Overloaded. Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function and compares the keys by using a specified comparer.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function and projects the elements for each group by using a specified function.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a key selector function. The keys are compared by using a comparer and each group's elements are projected by using a specified function.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. The keys are compared by using a specified comparer.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. The elements of each group are projected by using a specified function.(Defined by .) | ||
Overloaded. Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. Key values are compared by using a specified comparer, and the elements of each group are projected by using a specified function.(Defined by .) | ||
Overloaded. Correlates the elements of two sequences based on equality of keys and groups the results. The default equality comparer is used to compare keys.(Defined by .) | ||
Overloaded. Correlates the elements of two sequences based on key equality and groups the results. A specified is used to compare keys.(Defined by .) | ||
Overloaded. Produces the set intersection of two sequences by using the default equality comparer to compare values.(Defined by .) | ||
Overloaded. Produces the set intersection of two sequences by using the specified to compare values.(Defined by .) | ||
Overloaded. Correlates the elements of two sequences based on matching keys. The default equality comparer is used to compare keys.(Defined by .) | ||
Overloaded. Correlates the elements of two sequences based on matching keys. A specified is used to compare keys.(Defined by .) | ||
Overloaded. Returns the last element of a sequence.(Defined by .) | ||
Overloaded. Returns the last element of a sequence that satisfies a specified condition.(Defined by .) | ||
Overloaded. Returns the last element of a sequence, or a default value if the sequence contains no elements.(Defined by .) | ||
Overloaded. Returns the last element of a sequence that satisfies a condition or a default value if no such element is found.(Defined by .) | ||
Overloaded. Returns an that represents the total number of elements in a sequence.(Defined by .) | ||
Overloaded. Returns an that represents how many elements in a sequence satisfy a condition.(Defined by .) | ||
Overloaded. Returns the maximum value in a generic sequence.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the maximum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a generic sequence and returns the maximum resulting value.(Defined by .) | ||
Overloaded. Returns the minimum value in a generic sequence.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum nullable value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a sequence and returns the minimum value.(Defined by .) | ||
Overloaded. Invokes a transform function on each element of a generic sequence and returns the minimum resulting value.(Defined by .) | ||
Filters the elements of an based on a specified type.(Defined by .) | ||
Overloaded. Sorts the elements of a sequence in ascending order according to a key.(Defined by .) | ||
Overloaded. Sorts the elements of a sequence in ascending order by using a specified comparer.(Defined by .) | ||
Overloaded. Sorts the elements of a sequence in descending order according to a key.(Defined by .) | ||
Overloaded. Sorts the elements of a sequence in descending order by using a specified comparer.(Defined by .) | ||
Inverts the order of the elements in a sequence.(Defined by .) | ||
Overloaded. Projects each element of a sequence into a new form.(Defined by .) | ||
Overloaded. Projects each element of a sequence into a new form by incorporating the element's index.(Defined by .) | ||
Overloaded. Projects each element of a sequence to an and flattens the resulting sequences into one sequence.(Defined by .) | ||
Overloaded. Projects each element of a sequence to an , and flattens the resulting sequences into one sequence. The index of each source element is used in the projected form of that element.(Defined by .) | ||
Overloaded. Projects each element of a sequence to an , flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein.(Defined by .) | ||
Overloaded. Projects each element of a sequence to an , flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein. The index of each source element is used in the intermediate projected form of that element.(Defined by .) | ||
Overloaded. Determines whether two sequences are equal by comparing the elements by using the default equality comparer for their type.(Defined by .) | ||
Overloaded. Determines whether two sequences are equal by comparing their elements by using a specified .(Defined by .) | ||
Overloaded. Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence.(Defined by .) | ||
Overloaded. Returns the only element of a sequence that satisfies a specified condition, and throws an exception if more than one such element exists.(Defined by .) | ||
Overloaded. Returns the only element of a sequence, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence.(Defined by .) | ||
Overloaded. Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition.(Defined by .) | ||
Bypasses a specified number of elements in a sequence and then returns the remaining elements.(Defined by .) | ||
Overloaded. Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements.(Defined by .) | ||
Overloaded. Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements. The element's index is used in the logic of the predicate function.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Overloaded. Computes the sum of the sequence of values that are obtained by invoking a transform function on each element of the input sequence.(Defined by .) | ||
Returns a specified number of contiguous elements from the start of a sequence.(Defined by .) | ||
Overloaded. Returns elements from a sequence as long as a specified condition is true.(Defined by .) | ||
Overloaded. Returns elements from a sequence as long as a specified condition is true. The element's index is used in the logic of the predicate function.(Defined by .) | ||
Creates an array from a .(Defined by .) | ||
Overloaded. Creates a from an according to a specified key selector function.(Defined by .) | ||
Overloaded. Creates a from an according to a specified key selector function and key comparer.(Defined by .) | ||
Overloaded. Creates a from an according to specified key selector and element selector functions.(Defined by .) | ||
Overloaded. Creates a from an according to a specified key selector function, a comparer, and an element selector function.(Defined by .) | ||
Creates a from an .(Defined by .) | ||
Overloaded. Creates a from an according to a specified key selector function.(Defined by .) | ||
Overloaded. Creates a from an according to a specified key selector function and key comparer.(Defined by .) | ||
Overloaded. Creates a from an according to specified key selector and element selector functions.(Defined by .) | ||
Overloaded. Creates a from an according to a specified key selector function, a comparer and an element selector function.(Defined by .) | ||
Overloaded. Produces the set union of two sequences by using the default equality comparer.(Defined by .) | ||
Overloaded. Produces the set union of two sequences by using a specified .(Defined by .) | ||
Overloaded. Filters a sequence of values based on a predicate.(Defined by .) | ||
Overloaded. Filters a sequence of values based on a predicate. Each element's index is used in the logic of the predicate function.(Defined by .) | ||
Applies a specified function to the corresponding elements of two sequences, producing a sequence of the results.(Defined by .) |
For very large ConcurrentDictionary<TKey,TValue> objects, you can increase the maximum array size to 2 gigabytes (GB) on a 64-bit system by setting the configuration element to true in the run-time environment.
Note
ConcurrentDictionary<TKey,TValue> implements the and interfaces starting with the .NET Framework 4.6; in previous versions of the .NET Framework, the ConcurrentDictionary<TKey,TValue> class did not implement these interfaces.
Like the class, ConcurrentDictionary<TKey,TValue> implements the interface. In addition, ConcurrentDictionary<TKey,TValue> provides several methods for adding or updating key/value pairs in the dictionary, as described in the following table.
To do this
Use this method | Usage notes | |
---|---|---|
Add a new key to the dictionary, if it doesn’t already exist in the dictionary | This method adds the specified key/value pair, if the key doesn’t currently exist in the dictionary. The method returns true or false depending on whether the new pair was added. | |
Update the value for an existing key in the dictionary, if that key has a specific value | This method checks whether the key has a specified value, and if it does, updates the key with a new value. It's similar to the method, except that it's used for dictionary elements. | |
Store a key/value pair in the dictionary unconditionally, and overwrite the value of a key that already exists | The indexer’s setter: dictionary[key] = newValue | |
Add a key/value pair to the dictionary, or if the key already exists, update the value for the key based on the key’s existing value | —or— | accepts the key and two delegates. It uses the first delegate if the key doesn’t exist in the dictionary; it accepts the key and returns the value that should be added for the key. It uses the second delegate if the key does exist; it accepts the key and its current value, and it returns the new value that should be set for the key. accepts the key, a value to add, and the update delegate. This is the same as the previous overload, except that it doesn't use a delegate to add a key. |
Get the value for a key in the dictionary, adding the value to the dictionary and returning it if the key doesn’t exist | —or— | These overloads provide lazy initialization for a key/value pair in the dictionary, adding the value only if it’s not there. takes the value to be added if the key doesn’t exist. takes a delegate that will generate the value if the key doesn’t exist. |
All these operations are atomic and are thread-safe with regards to all other operations on the ConcurrentDictionary<TKey,TValue> class. The only exceptions are the methods that accept a delegate, that is, and . For modifications and write operations to the dictionary, ConcurrentDictionary<TKey,TValue> uses fine-grained locking to ensure thread safety. (Read operations on the dictionary are performed in a lock-free manner.) However, delegates for these methods are called outside the locks to avoid the problems that can arise from executing unknown code under a lock. Therefore, the code executed by these delegates is not subject to the atomicity of the operation.
The following example shows how to construct a ConcurrentDictionary<TKey,TValue> object.
class CD_Ctor{ // Demonstrates: // ConcurrentDictionaryctor(concurrencyLevel, initialCapacity)// ConcurrentDictionary [TKey] static void Main() { // We know how many items we want to insert into the ConcurrentDictionary.// So set the initial capacity to some prime number above that, to ensure that// the ConcurrentDictionary does not need to be resized while initializing it. int NUMITEMS = 64; int initialCapacity = 101;// The higher the concurrencyLevel, the higher the theoretical number of operations// that could be performed concurrently on the ConcurrentDictionary. However, global// operations like resizing the dictionary take longer as the concurrencyLevel rises. // For the purposes of this example, we'll compromise at numCores * 2. int numProcs = Environment.ProcessorCount; int concurrencyLevel = numProcs * 2; // Construct the dictionary with the desired concurrencyLevel and initialCapacityConcurrentDictionary cd = new ConcurrentDictionary (concurrencyLevel, initialCapacity); // Initialize the dictionary for (int i = 0; i < NUMITEMS; i++) cd[i] = i * i; Console.WriteLine("The square of 23 is {0} (should be {1})", cd[23], 23 * 23); }}
备注:转自