c # toString () производительность - PullRequest
7 голосов
/ 07 мая 2011

Мне интересно узнать о методе ToString() в C #.Возьмем, к примеру, следующее:

object height = 10;

string heightStr = height.ToString();

Когда я вызываю ToString() на height, я получаю строковый тип.Среда выполнения выделяет память для этой строки?

Ответы [ 2 ]

7 голосов
/ 07 мая 2011

Да, среда выполнения будет выделять память для любого строкового объекта, который вы создаете или запрашиваете, в том числе тот, который возвращается из вызова метода.

Но нет, это абсолютно , а не , о чем вам нужно беспокоиться. Это не окажет какого-либо заметного влияния на производительность вашего приложения, и вы никогда не должны поддаваться искушению преждевременно оптимизировать код.

Метод Int32.ToString очень быстрый. Он обращается к нативному коду, написанному на уровне CLR, что вряд ли является узким местом производительности в любом приложении.


Фактически, проблема производительности real здесь будет boxing , которая представляет собой процесс преобразования типа значения в тип object и обратно. Это происходит потому, что вы объявили переменную height как тип object, а затем присвоили ей целочисленное значение.

Намного лучше объявить height явно как тип int, вот так:

int height = 10;
string heightStr = height.ToString();
4 голосов
/ 07 мая 2011

Да.Создание нового экземпляра класса (как это делается с строковым классом в этом случае) выделит память для экземпляра.

...