- 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());
}
someone 04.12.2014 10:11 # +3
bormand 04.12.2014 10:36 # 0
bormand 04.12.2014 10:37 # 0
roman-kashitsyn 04.12.2014 10:40 # +2
Небось с жабы человек перешёл, а разбираться в новой платформе лень. Ведь все говорят, что если выучил один "ООП езык", знаешь и все остальные.
Lokich 04.12.2014 11:46 # +1
http://ideone.com/bq5rYj
а вообще, есть string.Copy(mystring), которая возвращает копию строки.
roman-kashitsyn 04.12.2014 12:15 # +5
Строки в жабе (да и много ещё где) иммутабельны. Когда нужно взять подстроку, можно просто вычислять смещения, а копирования памяти не делать. Это и есть шаринг.
Это всё круто, но если загрузить в память файл на пару метров и выдернуть из него подстроку размером в 10 символов, в памяти всё равно будет сидеть весь файл. Поэтому копировать память при вычислении подстрок (т.е. без шаринга) иногда предпочтительнее.
В жабе раньше применялся шаринг, с какой-то версии семёрки его вроде отключили. В дотнете вроде вообще никогда не применялся.
cyperh 04.12.2014 12:55 # 0
http://msdn.microsoft.com/ru-ru/library/system.string.intern(v=vs.110).aspx
roman-kashitsyn 04.12.2014 12:58 # 0
UPD: пролистал доку. Похоже, что ссылки всё-же жёсткие. Не айс.
cyperh 04.12.2014 13:06 # 0
Во первых, выделяемая для интернированных объектов String память едва ли освободится до завершения работы среды CLR. Дело в том, что [color=black]ссылка на интернированный объект String, которую хранит CLR, может сохраняться и после завершения работы приложения и даже домена приложения[/color]. Во-вторых, для интернирования строки ее сначала нужно создать. Используемая объектом String память должна быть вначале выделена, не смотря на то, что [color=black]она подлежит освобождению сборщиком мусора[/color].
На самом деле да) караул
bormand 04.12.2014 13:30 # 0
Может всё же интернируются только литералы?
3.14159265 04.12.2014 13:32 # 0
В жабе(6) можно было, пока они в пермгене хранились...
PermGen = permanent generation с фиксированным размером. Ну со всеми вытекающими.
cyperh 04.12.2014 15:04 # 0
a0 интернится, остальное нет, так что засрать пул не получится)
Qwertiy 05.12.2014 11:32 # 0
Lokich 04.12.2014 13:22 # 0
вообще, если честно, я плохо разбираюсь в неуправляемом коде, но если я все правильно понял, то string.Substring использует неуправляемый код, и работает напрямую с указателем, фиксируя его на момент работы с ним от сборщика мусора
http://referencesource.microsoft.com/#mscorlib/system/string.cs,1277
cyperh 04.12.2014 13:26 # +1
#if GENERICS_WORK
3.14159265 04.12.2014 13:45 # +1
Кмк зря. Раньше у кого руки прямые наслаждались O(1), а при необходимости копировали в новый String. А теперь принудительно O(N) и ничего не поделаешь.
roman-kashitsyn 04.12.2014 13:46 # +1
someone 04.12.2014 13:39 # 0
Начиная с Java 7, substring создаёт копию диапазона массива, соответственно, в String хранится только указатель на массив безо всяких start/length.
Анонимус 04.12.2014 23:00 # +2
Зачем кто-то в джаве может хотеть чтоб строки не шарились?? Он пишет универсальный кучезасиральщик?
Qwertiy 05.12.2014 11:53 # 0
Lure Of Chaos 04.12.2014 11:36 # 0
pushistayapodmyshka 04.12.2014 12:05 # +1
cyperh 04.12.2014 12:50 # 0
Анонимус 04.12.2014 23:02 # 0