HistogramBase.GetValueAtPercentile — Double-Loop When Flat Array Index Is Available
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 55/100
- Tipo di issue
- Refactoring
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- csharp
- Ambito
- performance
Direzione di ricerca
Start in HistogramBase.cs at GetValueAtPercentile and inspect how LongHistogram stores its counts, including CountsArrayLength, GetCountAtIndex, and ValueFromIndex. Compare the existing nested scan with the proposed flat traversal; done means percentile lookup preserves the current result while avoiding the nested index mapping.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
File: HistogramBase.cs
The percentile lookup iterates nested i / j loops over BucketCount × SubBucketCount. Since CountsArrayIndex(bucketIndex, subBucketIndex) maps this to a flat array, and the counts array is already flat in LongHistogram, the entire scan can be done as a single flat loop:
public long GetValueAtPercentile(double percentile) { var countAtPercentile = Math.Max( (long)((Math.Min(percentile, 100.0) / 100.0 * TotalCount) + 0.5), 1);long runningCount = 0; for (int i = 0; i < CountsArrayLength; i++) { runningCount += GetCountAtIndex(i); if (runningCount >= countAtPercentile) return HighestEquivalentValue(ValueFromIndex(i)); } throw new ArgumentOutOfRangeException(...);
}
The nested loop computes GetCountAt(i, j) → GetCountAtIndex(CountsArrayIndex(i, j)) anyway — the flat version eliminates the CountsArrayIndex call per iteration and improves cache locality by accessing memory sequentially.
- Lingua principale
- C#
- Stelle
- 185
- Fork
- 31
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di HdrHistogram/HdrHistogram.NET
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
HdrHistogram/HdrHistogram.NET#167 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
HdrHistogram/HdrHistogram.NET#166 ·
-
WriterReaderPhaser.FlipPhase - Task.Yield().GetAwaiter().GetResult() is a Thread Pool Anti-Pattern Apertaagent enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
HdrHistogram/HdrHistogram.NET#144 ·
-
agent enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
HdrHistogram/HdrHistogram.NET#142 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
HdrHistogram/HdrHistogram.NET#156 ·
Tutte le issue di HdrHistogram/HdrHistogram.NET
Issue simili
-
untriaged
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
dotnet/dotnet-api-docs#13095 ·
-
area-deployment area-integrations triage:bot-seen
Difficoltà 2/5 Mezza giornata Idoneità per principianti 86/100
-
type/automation type/tech-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
newrelic/newrelic-dotnet-agent#3850 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
LuckyPennySoftware/AutoMapper#4660 ·