[MemoryDiagnoser]
public class ExtremelySimpleDictionaryBenchmark
{
private readonly List _keys = new();
private readonly Dictionary _dict = new ();
private readonly ConcurrentDictionary _concurrentDict = new ();
private const int DictionarySize = 300;
private const string Alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static string Generate(int length, Random random)
{
var result = new char[length];
for (var i = 0; i < length; i++)
result[i] = Alphabet[random.Next(Alphabet.Length)];
return new string(result);
}
[GlobalSetup]
public void Setup()
{
var rnd = new Random();
for (var i = 0; i < DictionarySize; i++)
{
var key = Generate(6, rnd);
var count = rnd.Next(1000);
_dict[key] = count;
_concurrentDict[key] = count;
_keys.Add(key);
}
}
[Benchmark(Baseline = true)]
public int Dictionary()
{
// variable res is used to avoid dead code elimination
var res = 0;
for (var index = 0; index < _keys.Count; index++)
if(_dict.TryGetValue(_keys[index], out var value))
res += value;
return res;
}
[Benchmark]
public int ConcurrentDictionary()
{
// variable res is used to avoid dead code elimination
var res = 0;
for (var index = 0; index < _keys.Count; index++)
if(_concurrentDict.TryGetValue(_keys[index], out var value))
res += value;
return res;
}
}
< /code>
дает действительно странные результаты. CONCURRENTDICTIONARY.trightValue
Beats Dictionary.trightValue с точки зрения производительности. У меня есть следующие результаты: < /p>
method < /th>
stddev
Соотношение
выделено
alloc
1.00 < /td>
-< /td>
na < /td>
< /tr>
/> 1,522 US < /td>
0,0172 US < /td>
0,0152 US < /td>
У меня есть действительно простой эталон для измерения и сравнения производительности словаря и countrentdictionary : [code][MemoryDiagnoser] public class ExtremelySimpleDictionaryBenchmark { private readonly List _keys = new(); private readonly Dictionary _dict = new (); private readonly ConcurrentDictionary _concurrentDict = new ();
private static string Generate(int length, Random random) { var result = new char[length]; for (var i = 0; i < length; i++) result[i] = Alphabet[random.Next(Alphabet.Length)]; return new string(result); }
[GlobalSetup] public void Setup() { var rnd = new Random(); for (var i = 0; i < DictionarySize; i++) { var key = Generate(6, rnd); var count = rnd.Next(1000); _dict[key] = count; _concurrentDict[key] = count; _keys.Add(key); } }
[Benchmark(Baseline = true)] public int Dictionary() { // variable res is used to avoid dead code elimination var res = 0; for (var index = 0; index < _keys.Count; index++) if(_dict.TryGetValue(_keys[index], out var value)) res += value; return res; }
[Benchmark] public int ConcurrentDictionary() { // variable res is used to avoid dead code elimination var res = 0; for (var index = 0; index < _keys.Count; index++) if(_concurrentDict.TryGetValue(_keys[index], out var value)) res += value; return res; } } < /code> дает действительно странные результаты. CONCURRENTDICTIONARY.trightValue [/code] Beats Dictionary.trightValue с точки зрения производительности. У меня есть следующие результаты: < /p>
method < /th> stddev Соотношение выделено alloc
1.00 < /td> -< /td> na < /td> < /tr>
/> 1,522 US < /td> 0,0172 US < /td> 0,0152 US < /td>
Я запускаю эталон Sort Sort на самой простой модели архитектуры GEM5.
я использовал три входа размера 1000: 1) наихудший случай (порядок убывания), средний случай (случайный порядок) и лучший случай (порядок повышения).
Результаты, показанные на...
Я запускаю эталон Sort Sort на самой простой модели архитектуры GEM5.
я использовал три входа размера 1000: 1) наихудший случай (порядок убывания), средний случай (случайный порядок) и лучший случай (порядок повышения).
Результаты, показанные на...
Я использую модель PH Cox для изучения времени выживания среди популяции, и моя модель прекрасно выводит, за исключением того, что я хочу изменить категории, которые она использует в качестве ссылки/базовой линии (то есть сейчас он использует...
Я использую модель PH Cox для изучения времени выживания среди популяции, и моя модель прекрасно выводит, за исключением того, что я хочу изменить категории, которые она использует в качестве ссылки/базовой линии (то есть сейчас он использует...
У меня есть странная проблема, когда я пытаюсь прочитать Excel в дата. 'E'
Я думаю, что ошибка должна заключаться в том, что, как только я открываю файл и запрещаю стиль R1C1, код работает нормально и читаю файл.
Как мне избежать этой проблемы?...