- 1
- 2
- 3
- 4
public static string ToNew(this String source)
{
return new string(source.ToCharArray());
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+94
public static string ToNew(this String source)
{
return new string(source.ToCharArray());
}
Небось с жабы человек перешёл, а разбираться в новой платформе лень. Ведь все говорят, что если выучил один "ООП езык", знаешь и все остальные.
http://ideone.com/bq5rYj
а вообще, есть string.Copy(mystring), которая возвращает копию строки.
Строки в жабе (да и много ещё где) иммутабельны. Когда нужно взять подстроку, можно просто вычислять смещения, а копирования памяти не делать. Это и есть шаринг.
Это всё круто, но если загрузить в память файл на пару метров и выдернуть из него подстроку размером в 10 символов, в памяти всё равно будет сидеть весь файл. Поэтому копировать память при вычислении подстрок (т.е. без шаринга) иногда предпочтительнее.
В жабе раньше применялся шаринг, с какой-то версии семёрки его вроде отключили. В дотнете вроде вообще никогда не применялся.
http://msdn.microsoft.com/ru-ru/library/system.string.intern(v=vs.110).aspx
UPD: пролистал доку. Похоже, что ссылки всё-же жёсткие. Не айс.
Во первых, выделяемая для интернированных объектов String память едва ли освободится до завершения работы среды CLR. Дело в том, что [color=black]ссылка на интернированный объект String, которую хранит CLR, может сохраняться и после завершения работы приложения и даже домена приложения[/color]. Во-вторых, для интернирования строки ее сначала нужно создать. Используемая объектом String память должна быть вначале выделена, не смотря на то, что [color=black]она подлежит освобождению сборщиком мусора[/color].
На самом деле да) караул
Может всё же интернируются только литералы?
В жабе(6) можно было, пока они в пермгене хранились...
PermGen = permanent generation с фиксированным размером. Ну со всеми вытекающими.
a0 интернится, остальное нет, так что засрать пул не получится)
вообще, если честно, я плохо разбираюсь в неуправляемом коде, но если я все правильно понял, то string.Substring использует неуправляемый код, и работает напрямую с указателем, фиксируя его на момент работы с ним от сборщика мусора
http://referencesource.microsoft.com/#mscorlib/system/string.cs,1277
#if GENERICS_WORK
Кмк зря. Раньше у кого руки прямые наслаждались O(1), а при необходимости копировали в новый String. А теперь принудительно O(N) и ничего не поделаешь.
Начиная с Java 7, substring создаёт копию диапазона массива, соответственно, в String хранится только указатель на массив безо всяких start/length.
Зачем кто-то в джаве может хотеть чтоб строки не шарились?? Он пишет универсальный кучезасиральщик?