Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрый string 
V
    Опции темы
MasterOfCode
Дата 29.8.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



есть 2 функции, одна работает с потоком, другая с строкой. Та которая работает со строкой очень медленная, та которая с потоком, работает в 10ки раз быстрее.
строка:
Код

        public string[] Test()
        {
            //переменные
            List<string> returnStrings;
            List<List<string>> Footer;
            //...
            for (int i = 0; i < Footer[0].Length; i++)
            {
                returnStrings.Add("");
                for (int j = 0; j < Footer.Count; j++)
                {
                    returnStrings[returnStrings.Count - 1] += " " + Footer[j][i];
                }
            }
            return returnStrings.ToArray();
        }

поток:
Код

        public StreamWriter Test()
        {
            //переменные
            StreamWriter returnStrings;
            List<List<string>> Footer;
            //...
            for (int i = 0; i < Footer[0].Count; i++)
            {
                for (int j = 0; j < Footer.Count; j++)
                {
                    returnStrings.Write(" " + Footer[j][i]);
                }
                returnStrings.Write(returnStrings.NewLine);
            }
            return returnStrings;
        }


мне нужно на выходе получить string[], но чтоб работало очень быстро, желательно как с потоком. Как?


--------------------
user posted image
PM ICQ   Вверх
nagg
Дата 29.8.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 6.1.2008
Где: Minsk

Репутация: нет
Всего: 4



может стоит копать в сторону StringBuilder'a...
--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
MasterOfCode
Дата 29.8.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(nagg @  29.8.2008,  09:13 Найти цитируемый пост)
может стоит копать в сторону StringBuilder'a... 

скорость не сильно отличается  от первого варианта. :( и у StringBuildera как я понял размер ограниченый, а меня бывают файлы в 60 000 строк и больше, в один StringBuilder непоместятся возможно :(
Разница времени:
StringBuilder = 1364062500
List<string>(String[]) = 1279062500

видно что разница со StringBuilder работает даже медленнее....


--------------------
user posted image
PM ICQ   Вверх
mihryak
Дата 29.8.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



во-первых, твой строковый код даже не скомпилируется, зачем обманываешь?
во-вторых, покажи, как ты пробовал применить здесь билдер

Добавлено через 9 минут и 13 секунд
не разобрался с манипуляциями, но в любом случае замени
Код

                returnStrings.Add("");
                for (int j = 0; j < Footer.Count; j++)
                {
                    returnStrings[returnStrings.Count - 1] += " " + Footer[j][i];
                }

на
Код

                for (int j = 0; j < footer.Count; j++)
                {
                    returnStrings.Add(" " + Footer[j][i]);
                }

PM MAIL ICQ   Вверх
MasterOfCode
Дата 29.8.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Эм... Я набивал его от руки. smile Мог и ошибиться.
Не буду заменять, т.к. мне нужно все значения выстраить в сторку через пробел! А так получится каждое значение в новой строке.

вот код со StringBuilder:

Код

            List<List<string>> Footer;
            StringBuilder sb = new StringBuilder();
            //...
             for (int i = 0; i < Footer[0].Count; i++)
            {
                sb.AppendLine("");
                for (int j = 0; j < Footer.Count; j++)
                {
                    sb.Append(" " + Footer[j][i]);
                }
            }


Добавлено через 11 минут и 21 секунду
Сорри, оказывается все тормозила моя невнимательность. У меня Footer был List<strinп[]>, а не List<List<string>. Поиск по индексу строки на порядок медленней чем по индексу контенера.
и вот в этом месте 
Код

sb.Append(" " + Footer[j][i]);

происходила утечка времени.
Как только поменял StringBilder заработал очень быстро!

Это сообщение отредактировал(а) MasterOfCode - 29.8.2008, 13:55


--------------------
user posted image
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.