Есть ли более эффективный способ сделать следующее, что-то просто не так в этом нуждается? Я ищу наиболее эффективный способ регистрации логарифмически.Логарифмически логарифмически 1, 10, 100, 1000 и т. Д.
public bool Read()
{
long count = Interlocked.Increment(ref _count);
switch (count)
{
case 1L:
case 10L:
case 100L:
case 1000L:
case 10000L:
case 100000L:
case 1000000L:
case 10000000L:
case 100000000L:
case 1000000000L:
case 10000000000L:
case 100000000000L:
case 1000000000000L:
case 10000000000000L:
case 100000000000000L:
case 10000000000000000L:
case 100000000000000000L:
case 1000000000000000000L:
_logger.LogFormattable(LogLevel.Debug, $"{count} Rows Read");
break;
}
return _reader.Read();
}
Update:
Вот мои микро тесты тестов.
- Method1: путь Übercoder с не отставать от состояния
- method2: Мой пути с большим заявлением переключателя
- method3: путь Маркуса Венингера с славным Math Function
Поскольку для меня 100000000 записи, считанные без регистрации, занимают около 20 минут, а дополнительные 4 секунды - ничто. Я собираюсь с прекрасным математическим способом делать что-то. Mathod3 побеждает в моем сценарии.
Run time for 100,000,000 iterations averaged over 100 attempts
Method1 Max: 00:00:00.3253789
Method1 Min: 00:00:00.2261253
Method1 Avg: 00:00:00.2417223
Method2 Max: 00:00:00.5295368
Method2 Min: 00:00:00.3618406
Method2 Avg: 00:00:00.3904475
Method3 Max: 00:00:04.0637217
Method3 Min: 00:00:03.2023237
Method3 Avg: 00:00:03.3979303
@ Дай, что на плавающей запятой, что здесь не так. Также возникает вопрос о C#, а не C++. Если у вас есть лучший, дубликат, дайте мне знать. –
Использование оператора 'switch', как и вы, действительно является самым быстрым способом сделать это, поскольку он будет скомпилирован в ряд инструкций хэш-таблицы на уровне процессора, которые бывают молниеносно. Хотя код «уродливый» (ну, я думаю, это красиво), я думаю, вы можете улучшить его, переместив его на отдельную функцию («IsExactlyPowerOf10 (Int64 n)») и вызвав это из вашей функции «Чтение». – Dai
Спасибо за хороший бенчмаркинг всех трех методов :) –