powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обьединение строк
10 сообщений из 10, страница 1 из 1
Обьединение строк
    #38296355
Che0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Есть 3 варианта:
1) StringBuilder.Append
2) Через String.Format
3) через +

То что StringBuilder надо использовать при большом количестве объединений строк, это понятно.
Но есть еще несколько вопросов:
1) String.Format или обычный плюс при объединении 2 строк предпочтительнее использовать? Есть ли разница?
2) если объединяемых строк скажем 4. И для их объединения используется следующая запись
Код: c#
1.
string s=s1+s2+s3+s4;

это компилятор понимает как одну операцию? И создает соответсвенно одну копию объекта стринг? или же как 4 операции, и создается 4 новых объектов?
...
Рейтинг: 0 / 0
Обьединение строк
    #38296388
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Che0,

1) string.format() для склейки строк малоэффективен т.к. делает дополнительную работу по поиску шаблонов. Оператор + для сложения двух строк отлично подходит.

2) Компилятор трактует строки особым образом и заменит s1+s2+s3+s4 на вызов String.Concat(s1,s2,s3,s4). В результате мы получим одну строку без промежуточных вариантов. На входе у нас N строк. У каждой Суммируем их длины, выделяем строку нужной длины и копируем по очереди в нее данные.
...
Рейтинг: 0 / 0
Обьединение строк
    #38296395
Che0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile, Спасибо большое
...
Рейтинг: 0 / 0
Обьединение строк
    #38296641
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Che0,

я например допилил малость MemoryStrem
добавив всего один метод
MemoryStrem.Write(params string[] values);
по умолчанию там ставлю UTF-8.
как то даже удобнее стало .
...
Рейтинг: 0 / 0
Обьединение строк
    #38296646
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, не понял, а StringWriter чем не угодил?
...
Рейтинг: 0 / 0
Обьединение строк
    #38296736
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperbeg-in-er, не понял, а StringWriter чем не угодил?
а вот , чем то не угодил.

наверное тем, что когда оно всё в байтах находится, душе как то спокойнее. туда можно много чего забрасывать . не только строки.
...
Рейтинг: 0 / 0
Обьединение строк
    #38296798
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, а мне непонятно чем StringBuilder не угодил. Создавать поток ради склейки строк это лишние накладные расходы.

beg-in-erя например допилил малость MemoryStrem
добавив всего один метод
MemoryStrem.Write(params string[] values);
Приведи реализацию, если несложно.
...
Рейтинг: 0 / 0
Обьединение строк
    #38296840
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileПриведи реализацию, если несложно.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
  public class MemStream : MemoryStream
    {
        private Encoding _enc = Encoding.UTF8;
        public Encoding Enc
        {
            get
            { return _enc; }
            set
            { _enc = value; }
        }

        public void ReadFromFile(string Filename)
        {
            byte[] BB = GET_BB._READ_BB(Filename);
            this.Read(BB,0,BB.Length);
        }
        public void SaveToFile(string Filename)
        {
            GET_BB._WRITE_BB(Filename,this.ToArray(),_enc);
        }
        public string Value
        {
            get
            {
                return Enc.GetString(this.ToArray());
            }
        }
        
        public void Write(params string[] s)
        {
            if (s!=null)
                foreach (var s0 in s)
                    if (s0 != null)
                    {
                        byte[] BB = Enc.GetBytes(s0);
                        Write(BB, 0, BB.Length);
                    }
        }
         //........
}



иногда просто редактируешь строки, и особо не нужно их переводить в строковый формат. пусть в байтах и лежат.
так оно вроде быстрее
...
Рейтинг: 0 / 0
Обьединение строк
    #38296848
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-ercooldeveloperbeg-in-er, не понял, а StringWriter чем не угодил?
а вот , чем то не угодил.

наверное тем, что когда оно всё в байтах находится, душе как то спокойнее. туда можно много чего забрасывать . не только строки.
Бред какой-то...
...
Рейтинг: 0 / 0
Обьединение строк
    #38296855
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За стримом нужно следить, диспоузить после использования, не допуская утечки памяти. Особенно если в цикле где-то используется или в разных потоках. Нафиг это рукожопие нужно, непонятно.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обьединение строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]