powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Посчитать сколько раз строка встречается в массиве строк
25 сообщений из 67, страница 1 из 3
Посчитать сколько раз строка встречается в массиве строк
    #39808905
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Считаю сколько раз строка встречается в массиве
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 private void textBoxParsedLines_DoubleClick(object sender, EventArgs e)
        {
            int count = 0;

            if (string.IsNullOrEmpty(textBoxStringToFind.Text))
                textBoxParsedLines.Text = richTextBoxParser.Lines.Length.ToString();
            else
            {
                progressBarParser.Maximum = richTextBoxParser.Lines.Length;

               for (int i = 0;  i < richTextBoxParser.Lines.Length; i++)
                {
                    if (richTextBoxParser.Lines[i].Contains(textBoxStringToFind.Text))
                        count++;

                    progressBarParser.Value = count;
                    Application.DoEvents();
                }

                textBoxParsedLines.Text = count.ToString();

            }
        }


Но код работает ужасно долго. Как ускорить процесс?
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808908
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посмотрел - между итерациями if (richTextBoxParser.Lines[i].Contains(textBoxStringToFind.Text)) - 90 милисекунд.
Я конечно знаю что Сшарп слоу блоу - но не настолько же.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808911
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закомменть на время Application.DoEvents(), проверь что будет
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808912
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даже если убрать
progressBarParser.Value = count;
Application.DoEvents();
все равно межу итерациями 90 милисекунд.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808916
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цикл замени на foreach
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808922
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthatЦикл замени на foreach
фига се! помогло. пробегает за секунду. спасибо!
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808933
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя тут нам пытаются доказать что foreach медленее.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808937
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7, дело совсем не в этом... а в реализации вашей... посмотрите на код и вам станет немного понятней в чем причина оверхеда.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808938
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7хотя тут нам пытаются доказать что foreach медленее.а причем тут это. Видимо, обращение к Lines по индексу достаточно медленное
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808939
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya7хотя тут нам пытаются доказать что foreach медленее.а причем тут это. Видимо, обращение к Lines по индексу достаточно медленное
вот это и не понятно как прямая индексация медленее чем foreach.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808940
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а ты смотрел, что внутри? Кто сказал, что там массив?
Возможно, чтобы получить строку по индексу, он каждый раз делает пересчет от начала текста.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808941
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, я привел ссыль... но вера в волшебства непреодалима
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808942
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

по ссылкам никто не ходит, надо прям сюда постить :)
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808943
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вишь, а он свою ссыль привел, чья ссыль круче?
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808944
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНу а ты смотрел, что внутри? Кто сказал, что там массив?
Возможно, чтобы получить строку по индексу, он каждый раз делает пересчет от начала текста.
а вот это уже ближе к телу, как говорил Моппасан. Действительно я же обращаюсь в richTextBox а надо richTextBox считать в массив.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808946
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

возьмите за правило свойства один раз дёргать:

Код: 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.
private void textBoxParsedLines_DoubleClick(object sender, EventArgs e)
{
    int count = 0;
    var lines = richTextBoxParser.Lines;
    int linesCount = lines.Length;

    if (string.IsNullOrEmpty(textBoxStringToFind.Text))
        textBoxParsedLines.Text = linesCount.ToString();
    else
    {
        progressBarParser.Maximum = linesCount;

        for (int i = 0;  i < linesCount; i++)
        {
            if (lines[i].Contains(textBoxStringToFind.Text))
                count++;

            progressBarParser.Value = count;
            Application.DoEvents();
        }

        textBoxParsedLines.Text = count.ToString();
    }
}
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808948
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAjenya7,

возьмите за правило свойства один раз дёргать:

спасибо. так и сделал. более того

string str = textBoxStringToFind.Text;

if (richTextBoxParser.Lines[i].Contains(str ))

тоже экономит пару милисекунд.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808951
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAвозьмите за правило свойства один раз дёргать:не поможет
jenya7Я конечно знаю что Сшарп слоу блоу
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808953
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProskyANAвозьмите за правило свойства один раз дёргать:не поможет
jenya7Я конечно знаю что Сшарп слоу блоу
ну а че. борланд быстрее.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808962
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAjenya7,

возьмите за правило свойства один раз дёргать:

Вообще, бест практис, даже у МС описанный в дезигн лайбрарис гайдлайн, или как там биш его, это делать только свойства которые во-первых идемпотентны, во вторых которые можно вызывать повторно без удара по производительности (либо оно само быстрое, либо кешируется где-то). Но, вот, выходит, что они сами этому не всегда следуют. Взять хотя бы тот самый DateTime.Now, который по-хорошему должен был бы быть DateTime.GetNow().
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808963
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще, правило - если свойство возвращает reference type, то должен возвращаться один и тот же объект. И поэтому массивы из свойства вообще вовращать нельзя.
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808965
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7ну а че. борланд быстрее.
А еще там кнопки всякие есть шестиугольные. С диска "1001 компонент для Дельфи" - на радиорынке когда-то 90 руб. стоил .
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808967
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatskyANAjenya7,

возьмите за правило свойства один раз дёргать:

Вообще, бест практис, даже у МС описанный в дезигн лайбрарис гайдлайн, или как там биш его, это делать только свойства которые во-первых идемпотентны, во вторых которые можно вызывать повторно без удара по производительности (либо оно само быстрое, либо кешируется где-то). Но, вот, выходит, что они сами этому не всегда следуют. Взять хотя бы тот самый DateTime.Now, который по-хорошему должен был бы быть DateTime.GetNow().
Дык чтобы прийти к таким практикам, надо сначала сделать в туевой хуче мест иначе, огрести с этим проблем и прийти к выводам, что "бест практис" - это делать иначе.
При этом туеву хучу мест никто рефакторить не будет.
Так что лучше взять за правило свойства один раз дёргать
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39808968
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
jenya7,

Мне просто любопытно, что за задача, если поиск строки в массиве требует показа прогресса?
...
Рейтинг: 0 / 0
Посчитать сколько раз строка встречается в массиве строк
    #39809037
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2jenya7,

Мне просто любопытно, что за задача, если поиск строки в массиве требует показа прогресса?
чисто визуально это удобно. кроме того может быть 50 000 000 строк, так что подождать все таки придеться.
...
Рейтинг: 0 / 0
25 сообщений из 67, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Посчитать сколько раз строка встречается в массиве строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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