Существует ли более быстрый метод, чем StringBuilder, для конкатенации строк с максимальным шагом 9-10? - PullRequest
6 голосов
/ 26 мая 2010

У меня есть этот код для объединения некоторых элементов массива:

StringBuilder sb = new StringBuilder();
private RatedMessage joinMessage(int step, boolean isresult) {
        sb.delete(0, sb.length());
        RatedMessage rm;
        for (int i = 0; i <= step; i++) {
            if (mStack[i] == null)
                continue;
            rm = mStack[i].getCurrentMsg();// msg is built upfront, this just returns, it's a getter method call
            if (rm == null || rm.msg.length() == 0)
                continue;
            if (sb.length() != 0) {
                sb.append(", ");
            }
            sb.append(rm.msg);
        }
        rm.msg=sb.toString();
        return rm;
    }

Важно, чтобы в массиве было не более 10 элементов, поэтому это не так уж и много.

Мой вывод трассировки говорит мне, что этот метод вызывается 18864 раза, 16% времени выполнения было потрачено на этот метод. Могу ли я оптимизировать больше?

Ответы [ 11 ]

0 голосов
/ 26 мая 2010

Если ваша функция должна объединять элементы массива, почему вы передаете все эти безумные значения и неиспользуемые параметры?

private string joinMessage( string[] myArray)
{
  StringBuilder sbr = new StringBuilder();
  for(int i = 0; i < myArray.Length; i++)
  {
     if(!string.IsNullOrEmpty(myArray[i])
     {
       sbr.Append(myArray[i]);
       sbr.Append(",")
     }
  }
  return sbr.ToString();
}
...