Какое-либо предложение о том, как улучшить производительность Строки Java к байту [] преобразование?

С помощью C # 7 ответ от Майкла Стума может быть улучшен при сохранении читабельности оператора switch:

catch (Exception ex)
{
    switch (ex)
    {
        case FormatException _:
        case OverflowException _:
            WebId = Guid.Empty;
            break;
        default:
            throw;
    }
}

5
задан Timo Geusch 21 June 2009 в 18:38
поделиться

3 ответа

Я предполагаю, что часть проблемы может заключаться в том, что строка Java находится в формате UTF-16, т.е. два байта на символ; поэтому getBytes () выполняет кучу работы по преобразованию каждого элемента UTF-16 в один или два байта, в зависимости от вашего текущего набора символов.

Пробовали ли вы использовать CharsetEncoder - это должно дать вам больше контроля над кодировкой String и позволит вам пропустить некоторые накладные расходы в реализации по умолчанию getBytes .

Или вы пытались явно указать кодировку для getBytes и использовать US-ASCII в качестве набора символов?

4
ответ дан 14 December 2019 в 04:45
поделиться

Я вижу несколько вариантов:

  • If you have Latin-1 strings, you could just split the higher byte of the chars in the string (Charset does this too I think)
  • You could also split the work among multiple cores if you have more (the fork-join framework had backport to 1.5 once)
  • You could also build the data into a stringbuilder and only convert it to byte array once at the end.
  • Look at your GC/memory usage. Too much memory utilization might slow your algorithms down due frequent GC interruptions
  • 2
    ответ дан 14 December 2019 в 04:45
    поделиться

    Если вы все время конвертируете одни и те же строки, вы можете кэшировать результат в WeakHashMap.

    Также взгляните на метод getBytes () (источник доступен, если вы установите SDK), чтобы узнать, что именно он делает.

    1
    ответ дан 14 December 2019 в 04:45
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: