Память или время выбирать при использовании Directory.GetCurrent? - PullRequest
1 голос
/ 11 апреля 2011

Я бродил, что лучше всего сделать:

string tmp = Directory.GetCurrentDirectory();
string path = tmp.Substring(0,tmp.LastIndexOf('\\'));

или

string path = Directory.GetCurrentDirectory().Substring(0, Directory.GetCurrentDirectory().LastIndexOf('\\'));

когда я хочу взять корневой каталог текущего? Чтобы дважды вызвать метод или сделать строковую переменную, которую после этого необходимо удалить из сборщика мусора?

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

Относительно «проблемы» с сборщиком мусора: сборщик мусора не собирает переменных , он собирает объектов .Строковый объект все еще создается при вашем втором подходе, вы просто не берете его для собственного использования.

Они почти одинаковы, с той разницей, что второй дважды вызывает Directory.GetCurrentDirectory, и поэтомусоздание второго строкового объекта.Вопреки тому, что вы подумали, тот, который выполняет дополнительную работу на сборщике мусора, является вторым вариантом.

Независимо от производительности, гораздо проще и безопаснее (без условий гонки) просто сохранить его значение в переменной для дальнейшегоиспользуйте.

Чтобы получить путь к родительскому каталогу, я бы использовал метод Path.GetDirectoryName, поскольку он делает код намного более понятным, коротким и переносимым:

string path = Path.GetDirectoryName(tmp);
1 голос
/ 11 апреля 2011

Я посмотрел на исходный код System.IO.Directory, метод GetCurrentDirectory () делает пару собственных вызовов, использует StringBuilder, а затем выполняет некоторую обработку при каждом вызове метода. Таким образом, использование первого варианта будет лучшим выбором.

0 голосов
/ 11 апреля 2011

Я бы выбрал первый - по крайней мере, читабельный. Я не думаю, что вы действительно что-то получите, выбрав второй фрагмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...