ДЗ №6: Замер производительности #7

Merged
1ffy merged 2 commits from task/6_performance-evaluation into master 2026-04-06 20:00:49 +08:00
Owner
Method Categories Count Mean Error StdDev Ratio RatioSD Gen0 Gen1 Gen2 Allocated Alloc Ratio
'Revenue (baseline)' Revenue 1000 49.690 us 0.6007 us 0.5619 us 1.00 0.02 1.0986 - - 18.62 KB 1.00
Revenue Revenue 1000 25.280 us 0.1152 us 0.1021 us 0.51 0.01 6.5613 1.1597 - 86.5 KB 4.65
'Revenue (baseline)' Revenue 10000 622.959 us 7.9094 us 7.3984 us 1.00 0.02 9.7656 1.9531 - 175.1 KB 1.00
Revenue Revenue 10000 59.356 us 0.1719 us 0.1342 us 0.10 0.00 9.9487 2.1973 - 129.62 KB 0.74
'Revenue (baseline)' Revenue 100000 6,371.684 us 50.0304 us 46.7985 us 1.00 0.01 101.5625 39.0625 - 1732.16 KB 1.00
Revenue Revenue 100000 346.613 us 1.0241 us 0.9580 us 0.05 0.00 11.7188 2.4414 - 155.71 KB 0.09
'Sales (baseline)' Sales 1000 34.64 us 0.525 us 0.465 us 1.00 0.02 5.0659 0.1221 - 83.63 KB 1.00
Sales Sales 1000 15.19 us 0.224 us 0.210 us 0.44 0.01 4.3335 - - 70.87 KB 0.85
'Sales (baseline)' Sales 10000 386.26 us 3.254 us 3.044 us 1.00 0.01 51.7578 10.7422 - 851.66 KB 1.00
Sales Sales 10000 169.15 us 2.254 us 2.109 us 0.44 0.01 44.1895 - - 722.52 KB 0.85
'Sales (baseline)' Sales 100000 5,972.80 us 117.241 us 185.957 us 1.00 0.04 539.0625 93.7500 93.7500 8587.25 KB 1.00
Sales Sales 100000 1,938.96 us 28.748 us 24.006 us 0.32 0.01 445.3125 - - 7286.01 KB 0.85
'WorkSchedule (baseline)' WorkSchedule 1000 7.546 us 0.1185 us 0.1050 us 1.00 0.02 0.9766 0.0153 - 15.98 KB 1.00
WorkSchedule WorkSchedule 1000 6.726 us 0.1176 us 0.1100 us 0.89 0.02 0.4044 - - 6.66 KB 0.42
'WorkSchedule (baseline)' WorkSchedule 10000 84.170 us 0.7568 us 0.6320 us 1.00 0.01 9.0332 1.4648 - 148.86 KB 1.00
WorkSchedule WorkSchedule 10000 84.167 us 1.6222 us 1.6659 us 1.00 0.02 4.2725 0.3662 - 70.31 KB 0.47
'WorkSchedule (baseline)' WorkSchedule 100000 1,176.611 us 20.1601 us 17.8714 us 1.00 0.02 87.8906 46.8750 19.5313 1412.33 KB 1.00
WorkSchedule WorkSchedule 100000 1,608.807 us 31.1180 us 34.5876 us 1.37 0.03 60.5469 35.1563 27.3438 949.3 KB 0.67
| Method | Categories | Count | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio | |-------------------------- |------------- |------- |-------------:|-----------:|-----------:|------:|--------:|---------:|--------:|--------:|-----------:|------------:| | 'Revenue (baseline)' | Revenue | 1000 | 49.690 us | 0.6007 us | 0.5619 us | 1.00 | 0.02 | 1.0986 | - | - | 18.62 KB | 1.00 | | Revenue | Revenue | 1000 | 25.280 us | 0.1152 us | 0.1021 us | 0.51 | 0.01 | 6.5613 | 1.1597 | - | 86.5 KB | 4.65 | | 'Revenue (baseline)' | Revenue | 10000 | 622.959 us | 7.9094 us | 7.3984 us | 1.00 | 0.02 | 9.7656 | 1.9531 | - | 175.1 KB | 1.00 | | Revenue | Revenue | 10000 | 59.356 us | 0.1719 us | 0.1342 us | 0.10 | 0.00 | 9.9487 | 2.1973 | - | 129.62 KB | 0.74 | | 'Revenue (baseline)' | Revenue | 100000 | 6,371.684 us | 50.0304 us | 46.7985 us | 1.00 | 0.01 | 101.5625 | 39.0625 | - | 1732.16 KB | 1.00 | | Revenue | Revenue | 100000 | 346.613 us | 1.0241 us | 0.9580 us | 0.05 | 0.00 | 11.7188 | 2.4414 | - | 155.71 KB | 0.09 | || | 'Sales (baseline)' | Sales | 1000 | 34.64 us | 0.525 us | 0.465 us | 1.00 | 0.02 | 5.0659 | 0.1221 | - | 83.63 KB | 1.00 | | Sales | Sales | 1000 | 15.19 us | 0.224 us | 0.210 us | 0.44 | 0.01 | 4.3335 | - | - | 70.87 KB | 0.85 | | 'Sales (baseline)' | Sales | 10000 | 386.26 us | 3.254 us | 3.044 us | 1.00 | 0.01 | 51.7578 | 10.7422 | - | 851.66 KB | 1.00 | | Sales | Sales | 10000 | 169.15 us | 2.254 us | 2.109 us | 0.44 | 0.01 | 44.1895 | - | - | 722.52 KB | 0.85 | | 'Sales (baseline)' | Sales | 100000 | 5,972.80 us | 117.241 us | 185.957 us | 1.00 | 0.04 | 539.0625 | 93.7500 | 93.7500 | 8587.25 KB | 1.00 | | Sales | Sales | 100000 | 1,938.96 us | 28.748 us | 24.006 us | 0.32 | 0.01 | 445.3125 | - | - | 7286.01 KB | 0.85 | || | 'WorkSchedule (baseline)' | WorkSchedule | 1000 | 7.546 us | 0.1185 us | 0.1050 us | 1.00 | 0.02 | 0.9766 | 0.0153 | - | 15.98 KB | 1.00 | | WorkSchedule | WorkSchedule | 1000 | 6.726 us | 0.1176 us | 0.1100 us | 0.89 | 0.02 | 0.4044 | - | - | 6.66 KB | 0.42 | | 'WorkSchedule (baseline)' | WorkSchedule | 10000 | 84.170 us | 0.7568 us | 0.6320 us | 1.00 | 0.01 | 9.0332 | 1.4648 | - | 148.86 KB | 1.00 | | WorkSchedule | WorkSchedule | 10000 | 84.167 us | 1.6222 us | 1.6659 us | 1.00 | 0.02 | 4.2725 | 0.3662 | - | 70.31 KB | 0.47 | | 'WorkSchedule (baseline)' | WorkSchedule | 100000 | 1,176.611 us | 20.1601 us | 17.8714 us | 1.00 | 0.02 | 87.8906 | 46.8750 | 19.5313 | 1412.33 KB | 1.00 | | WorkSchedule | WorkSchedule | 100000 | 1,608.807 us | 31.1180 us | 34.5876 us | 1.37 | 0.03 | 60.5469 | 35.1563 | 27.3438 | 949.3 KB | 0.67 |
Task 6: Performance Evaluation
All checks were successful
CI / build-and-test (push) Successful in 1m19s
732acb31f2
1ffy force-pushed task/6_performance-evaluation from 732acb31f2
All checks were successful
CI / build-and-test (push) Successful in 1m19s
to 7ed7a7d5f3
All checks were successful
CI / build-and-test (push) Successful in 1m22s
2026-03-16 22:06:56 +08:00
Compare
VolovikovAlexander requested changes 2026-03-17 13:18:33 +08:00
Dismissed
VolovikovAlexander left a comment

В целом хорошо. Решение местами упростили. Есть замечания с моей стороны. Нагрузочный тест - хороший. Спасибо.

В целом хорошо. Решение местами упростили. Есть замечания с моей стороны. Нагрузочный тест - хороший. Спасибо.
@ -50,0 +73,4 @@
var merged = new Dictionary<DateOnly, RevenueAccumulator>(capacity: 64);
foreach (var localDict in threadLocalDicts.Values)
First-time contributor

1 Ну раз уж Вы используете ForEach для наполнения словаря, то корректней использовать потокобезопасный словарь
https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.concurrent.concurrentdictionary-2?view=net-8.0

2 Вы далее используете проход двумя циклами. Лучше сделать ключ другой и сопоставлять по ключу. Это резко ускорит работы. Заменить два цикла - одним.

На занятии я показывал пример. Уточните у коллег.

1 Ну раз уж Вы используете ForEach для наполнения словаря, то корректней использовать потокобезопасный словарь https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.concurrent.concurrentdictionary-2?view=net-8.0 2 Вы далее используете проход двумя циклами. Лучше сделать ключ другой и сопоставлять по ключу. Это резко ускорит работы. Заменить два цикла - одним. На занятии я показывал пример. Уточните у коллег.
@ -50,2 +79,3 @@
{
Period = g.Key,
ref var m = ref CollectionsMarshal.GetValueRefOrAddDefault(merged, date, out _);
m.CashAmount += local.CashAmount;
First-time contributor

Суммы не верно рассчитаны
см https://gitverse.ru/VolovikovAlexander/PersonalAccount2026/content/master/Src/PersonalAccount.Api/Logics/RevenueReportService.cs

При оплате наличными, нужно сумму сдачи исключить.
При любой оплате, нужно сумму скидки исключить.

Суммы не верно рассчитаны см https://gitverse.ru/VolovikovAlexander/PersonalAccount2026/content/master/Src/PersonalAccount.Api/Logics/RevenueReportService.cs При оплате наличными, нужно сумму сдачи исключить. При любой оплате, нужно сумму скидки исключить.
@ -71,0 +110,4 @@
switch (t.PaymentType)
{
case PaymentType.Cash: acc.CashAmount -= t.Amount; break;
case PaymentType.Bank: acc.BankAmount -= t.Amount; break;
First-time contributor

Возврат может быть только для оплаты наличными.

Возврат может быть только для оплаты наличными.
@ -65,0 +69,4 @@
openShifts.Remove(employeeId);
}
}
First-time contributor

Не вижу реализаций следующих граничных условий:

  • Есть только завершение, но нет начала работа. Есть только начало работы, но нет завершщения
  • Есть несколько начала работы и несколько завершения в рамках одного дня.
Не вижу реализаций следующих граничных условий: - Есть только завершение, но нет начала работа. Есть только начало работы, но нет завершщения - Есть несколько начала работы и несколько завершения в рамках одного дня.
Task 6 Changes
All checks were successful
CI / build-and-test (push) Successful in 1m30s
8548dc798b
VolovikovAlexander left a comment

Ok

Ok
1ffy merged commit 1c67a4048c into master 2026-04-06 20:00:49 +08:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
fbki.Levitan/PersonalAccount!7
No description provided.