Bonjour,
Soit la situation suivante :
On développe une application qui compte le nombre de fois qu’un terme apparaît dans un ensemble de fichiers texte.

Cette application présente le code suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
class Counter{
 
System.Collections.Concurrent.ConcurrentDictionary<string, int> _wordCounts = new System.Collections.Conccurent.ConccurentDictionary<string, int> ();
 
public Action<DictionaryInfo> ProcessDirectory(){
 
return (dirInfo => 
var files = dirInfo.GetFiles(“*.cs”).AsPaérallel<FileInfo>();
 
files.ForAll<FileInfo>(fileInfo =>
{
 
var fileContent = File.RealdAllTexct(fileInfo.FullName);
var sb = new StringBuilder();
foreach(var  val in fileContent){
 
sb.append(char.IsLetter(val) ? val.ToString().ToLowerInvariant() : “ “ );
 
}
 
string[] wordsInFile = sb.ToString().Split(new []{‘  ‘}, StringSplitoptions.RemoveEmptyEntriens);
 
foreach(var word in wordsInFile)
 
{
 
 
}
 
});
Il est demandé de remplir cette boucle foreach et que soient respectés les éléments suivants
1-remplir l’objet _wordCounts avec une liste de mots et le nombre d’occurrences de chaque mot
2-assurer que la mise à jour de l’objet ConcurrentDictionary puisse se produire en parallèle
Plusieurs possibilités sont proposées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
A _wordsCounts.AddOrUpdate(word, 1, (s,n) =>n+1) ;
B int value;
if(_wordCounts[word]=value++;
}
else
{
_wordCounts[word]=1
}
C var value = _wordCounts.GetOrAdd(word, 0);
_wordCounts[word]=value++;
 
D var value =_wordCounts.GetOrAdd(word,0);
_wordCounts.TryOrUpdate(word, value+1,value);
Après avoir étudié chaque possibilité, il me semble que chacune d’entre elles pourraient convenir même si parfois le code est un peu lourd, alors que c’est la possibilité A qui convient le mieux.
Qu’en pensez-vous ?
Pouvez-vous me dire si la possibilité A est davantage en en relation avec le fait que la mise à jour puisse se produire en parallèle ?

Merci beaucoup de votre réponse.
Cordialement.

new_wave