Click here to Skip to main content
15,905,785 members
Home / Discussions / C#
   

C#

 
AnswerRe: thread problem Pin
Rob Philpott17-Aug-14 23:48
Rob Philpott17-Aug-14 23:48 
AnswerRe: thread problem Pin
Dave Kreskowiak18-Aug-14 5:06
mveDave Kreskowiak18-Aug-14 5:06 
AnswerRe: thread problem Pin
Eddy Vluggen18-Aug-14 7:23
professionalEddy Vluggen18-Aug-14 7:23 
Questiontwo comboBoxs Pin
picasso217-Aug-14 18:30
picasso217-Aug-14 18:30 
AnswerRe: two comboBoxs Pin
Snehasish_Nandy17-Aug-14 19:17
professionalSnehasish_Nandy17-Aug-14 19:17 
GeneralRe: two comboBoxs Pin
picasso218-Aug-14 5:49
picasso218-Aug-14 5:49 
GeneralRe: two comboBoxs Pin
Bernhard Hiller18-Aug-14 21:08
Bernhard Hiller18-Aug-14 21:08 
QuestionC# Performance Issue Pin
SledgeHammer0117-Aug-14 14:50
SledgeHammer0117-Aug-14 14:50 
AnswerRe: C# Performance Issue Pin
Shao Voon Wong17-Aug-14 15:26
mvaShao Voon Wong17-Aug-14 15:26 
GeneralRe: C# Performance Issue Pin
SledgeHammer0117-Aug-14 16:05
SledgeHammer0117-Aug-14 16:05 
GeneralRe: C# Performance Issue Pin
Shao Voon Wong17-Aug-14 16:23
mvaShao Voon Wong17-Aug-14 16:23 
SuggestionRe: C# Performance Issue Pin
Richard Deeming18-Aug-14 2:32
mveRichard Deeming18-Aug-14 2:32 
GeneralRe: C# Performance Issue Pin
jschell18-Aug-14 11:48
jschell18-Aug-14 11:48 
AnswerRe: C# Performance Issue Pin
Bernhard Hiller17-Aug-14 20:29
Bernhard Hiller17-Aug-14 20:29 
AnswerRe: C# Performance Issue Pin
Richard MacCutchan17-Aug-14 20:41
mveRichard MacCutchan17-Aug-14 20:41 
GeneralRe: C# Performance Issue Pin
Mycroft Holmes17-Aug-14 20:59
professionalMycroft Holmes17-Aug-14 20:59 
GeneralRe: C# Performance Issue Pin
Richard MacCutchan17-Aug-14 21:34
mveRichard MacCutchan17-Aug-14 21:34 
GeneralRe: C# Performance Issue Pin
SledgeHammer0118-Aug-14 4:46
SledgeHammer0118-Aug-14 4:46 
AnswerRe: C# Performance Issue Pin
Rob Philpott17-Aug-14 23:45
Rob Philpott17-Aug-14 23:45 
AnswerRe: C# Performance Issue Pin
Richard Deeming18-Aug-14 2:30
mveRichard Deeming18-Aug-14 2:30 
GeneralRe: C# Performance Issue Pin
SledgeHammer0118-Aug-14 4:51
SledgeHammer0118-Aug-14 4:51 
GeneralRe: C# Performance Issue Pin
Richard Deeming18-Aug-14 7:31
mveRichard Deeming18-Aug-14 7:31 
Your second example should look something like:
C#
theValue = concurrentDict.GetOrAdd(theKey, key =>
{
    DoSomeOtherStuff();
    DoAFewMoreThings();
    
    var theNewObject = NewUpAnObject(key);
    return theNewObject;
});

The entire delegate would be executed within the scope of a lock, as with your non-generic dictionary code. However, the lock would be more granular, based on the number of buckets and the concurrency level of the collection.

If you wanted to execute the "other stuff" outside of the lock, your code would look like:
C#
if (!concurrentDict.TryGetValue(theKey, out theValue))
{
    DoSomeOtherStuff();
    DoAFewMoreThings();
    
    var theNewObject = NewUpAnObject(theKey);
    theValue = concurrentDict.GetOrAdd(theKey, theNewObject);
    
    // Or:
    // theValue = concurrentDict.GetOrAdd(theKey, key => NewUpAnObject(key));
}

In this case, DoSomeOtherStuff, DoAFewMoreThings and NewUpAnObject would run outside of any lock. However, the insert to the dictionary would not suffer from a race condition, as the class is specifically written to cope with this type of code.



"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer


GeneralRe: C# Performance Issue Pin
SledgeHammer0118-Aug-14 8:31
SledgeHammer0118-Aug-14 8:31 
AnswerRe: C# Performance Issue Pin
Pete O'Hanlon18-Aug-14 3:09
mvePete O'Hanlon18-Aug-14 3:09 
GeneralRe: C# Performance Issue Pin
SledgeHammer0118-Aug-14 4:52
SledgeHammer0118-Aug-14 4:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.