Сколько строк из списка Зенка может переварить не подавившись?

Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Прокосячил и загнал в список 5 милионов строк, Зенка обработать такое не смогла, добрый и надежный нотпад++ только смог такое осилить, пришлось в ручную разбивать на более мелкие файлы.
Методом тестов дошел до 500000 строк в списке и Зенка с усером кое как смогла осилить такой объем, хотябы смогла работать с таким файлом!
Нужно было вычистить мусор из этого общего файла, нужно удалить 200 тысяч строк, пробовал снипетом, сразу Зенка зависает.
Вопрос, какой объем текстового файла можно безболезненно кормить Зенке?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
При желании можно считать хоть 1 гиг, главное правильно код написать.
Плюс массив использовать лучше, чем лист
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
При желании можно считать хоть 1 гиг, главное правильно код написать.
Плюс массив использовать лучше, чем лист
спросил же не что использовать ))) а конкретно у меня сейчас в текстовом файле, хочу знать сколько оптимально чтобы Зенка на колени не вставала! С 5 миллионов строк она захлебнулась аж сопли потекли!
 

agregator

Пользователь
Регистрация
26.04.2017
Сообщения
34
Благодарностей
2
Баллы
8

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с agregator какие-либо сделки.

это ты еще многопоток не пробывал
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
от оперативки зависит
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
спросил же не что использовать ))) а конкретно у меня сейчас в текстовом файле, хочу знать сколько оптимально чтобы Зенка на колени не вставала! С 5 миллионов строк она захлебнулась аж сопли потекли!
Я 10 млн строк спокойно открывал.
Вот пример кода:
Код:
string[] mass_text = File.ReadAllLines(путь);
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Я 10 млн строк спокойно открывал.
Вот пример кода:
Код:
string[] mass_text = File.ReadAllLines(путь);
у меня открыть то его зенка открыла а обрабатывать начала и чтото совсем отзыватся перестала! Хотя может она работала, а я просто непонял.
Сейчас разбил по 50к строк запустил снипетом вычищать мусор он 100к строк проверяет и вычищает из этих файлов, со скрипом работает, гдето по минуты 2-3 уходит на обработку одного файла в 50к строк.
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Для очистки мусора есть функция ReadLine, она не загружает весь объем, а загружает частично, плюс есть возможность использовать FileStream + BinaryReader и считывать по строкам
 
  • Спасибо
Реакции: LightWood

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
у меня открыть то его зенка открыла а обрабатывать начала и чтото совсем отзыватся перестала! Хотя может она работала, а я просто непонял.
Сейчас разбил по 50к строк запустил снипетом вычищать мусор он 100к строк проверяет и вычищает из этих файлов, со скрипом работает, гдето по минуты 2-3 уходит на обработку одного файла в 50к строк.
Так у вас затык не в размере открытого файла, а в коде самой обработки получается.
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Так у вас затык не в размере открытого файла, а в коде самой обработки получается.
да нет, сейчас разбил по 50 к строк и проверяю из другого файла 200к строк на совпадения и кое как со скрежетом.
этим снипетом делаю
C#:
var firstList = project.Lists["Список 1"];
var secondList = project.Lists["Список 2"];
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < firstList.Count; i++)
    {
        var str1 = firstList[i];
        for(int j=secondList.Count-1; j >= 0; j--)
        {
               var str2 = secondList[j];
            if (str1==str2)
            {
                secondList.RemoveAt(j);
            }   
        }   
    }
}
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
не знаю насколько увеличится производительность, но попробуй вариант без создания переменных в цикле, просто сравнивай
Код:
firstList[i]==secondList[j]
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
да нет, сейчас разбил по 50 к строк и проверяю из другого файла 200к строк на совпадения и кое как со скрежетом.
этим снипетом делаю
C#:
var firstList = project.Lists["Список 1"];
var secondList = project.Lists["Список 2"];
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < firstList.Count; i++)
    {
        var str1 = firstList[i];
        for(int j=secondList.Count-1; j >= 0; j--)
        {
               var str2 = secondList[j];
            if (str1==str2)
            {
                secondList.RemoveAt(j);
            } 
        } 
    }
}
Он со скрежетом на больших файлах работать и будет, да еще и в один поток только.

Замените код на такой, будет намного быстрее обрабатывать:
C#:
string[] first = File.ReadAllLines(@"c:\file1.txt");
string[] second = File.ReadAllLines(@"c:\file2.txt");
string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
File.WriteAllLines(@"c:\file2.txt", third);
Дальше, для ускорения, надо делать оптимизацию исходя из конкретики.
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
@Adigen ЁПРСТ все так просто? Я то сидел тут пыхтел, а тут закинул твой скрипт и он за секунду весь список отработал, я вахуэ!)))
Спасибо @Adigen!
 
  • Спасибо
Реакции: Adigen

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
То то и оно!
Тут больше зависит не от объёмов файлов и данных, а от подхода к их обработке.

Когда то давно была задача - получал пару миллионов строк в один список и нужно было в нём оставить уникальные, которых нет во втором списке(сколько было в нём даже не знаю, но на много больше. Вес файла был больше гига).
В итоге такого рода код, как собрал masterLomaster проверял больше суток, но знающий человек помог с кодом и уже та же самая операция выполнялась не более 3х минут.
Всё то же самое - компьютер, файлы, программа. Разница лишь в подходе.
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Это да )))

Разница лишь в подходе.
и когда руки откуданада )))

Обычно я такие большие файлы не делаю, так как уже раз накидал в .csv файл пару гигов, потом его открыть ничем вообще не мог. Но тут просмотрел, ну и почемуто у меня мысль была что Зенка справится - это же "ОБЫЧНЫЙ" текстовый файл! Ага только, чтото не так шустро у меня вышло )))
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
Он со скрежетом на больших файлах работать и будет, да еще и в один поток только.

Замените код на такой, будет намного быстрее обрабатывать:
C#:
string[] first = File.ReadAllLines(@"c:\file1.txt");
string[] second = File.ReadAllLines(@"c:\file2.txt");
string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
File.WriteAllLines(@"c:\file2.txt", third);
Дальше, для ускорения, надо делать оптимизацию исходя из конкретики.
хитро) зачем запускать многопоток, если есть AsParallel() . хотя это тоже самое, насколько я понял
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
хитро) зачем запускать многопоток, если есть AsParallel() . хотя это тоже самое, насколько я понял
Не совсем, как обычно, есть ньюансы, но в данной задаче при данном количестве вводных, да - это один из оптимальных вариантов, который будет максимально оптимизирован при компиляции, и при этом использовать ядра по максимуму.
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Он со скрежетом на больших файлах работать и будет, да еще и в один поток только.

Замените код на такой, будет намного быстрее обрабатывать:
C#:
string[] first = File.ReadAllLines(@"c:\file1.txt");
string[] second = File.ReadAllLines(@"c:\file2.txt");
string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
File.WriteAllLines(@"c:\file2.txt", third);
Дальше, для ускорения, надо делать оптимизацию исходя из конкретики.
А со списками как будет выглядеть код?
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Да запускает в одном инстансе многопоточную обработку коллекции в том количестве потоков, сколько у тебя ядер ЦП
У меня, например, 4 ядра, значит, всего 4 потока? маловато как-то. Слышал, что есть возможность как-то распараллелить в 1000 потоков. Не знаю как? Думал тут можно задавать количество
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
У меня, например, 4 ядра, значит, всего 4 потока? маловато как-то. Слышал, что есть возможность как-то распараллелить в 1000 потоков. Не знаю как? Думал тут можно задавать количество
Можно, но эффекта от этого не будет практически никакого.
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
Но как-то работают в сотни и 1000 потоков, задавая их из кода. Вот хотелось бы знать как?
просто дописывают после AsParallel() код WithDegreeOfParallelism(1000)
а разве не так - написать выполнение шаблона через запуск одной фнукции и запускать функцию через new Thread(функция с шагами шаблона), столько раз сколько установишь
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
  • Спасибо
Реакции: Valiksim и arhip1985

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
а разве не так - написать выполнение шаблона через запуск одной фнукции и запускать функцию через new Thread(функция с шагами шаблона), столько раз сколько установишь
В многопоточности есть десятки способов запустить потоки - через Thread, Task, async Task, Parallel.For, Parallel.Foreach, Parallel.Invoke, Thread.Pool, IAsyncResult, PLINQ, 2 основных вида Timer и ещё парочку.
У каждого способа свои плюсы и минусы и про каждый способ можно целую большую статью написать
 
  • Спасибо
Реакции: Valiksim и arhip1985

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
В многопоточности есть десятки способов запустить потоки - через Thread, Task, async Task, Parallel.For, Parallel.Foreach, Parallel.Invoke, Thread.Pool, IAsyncResult, PLINQ, 2 основных вида Timer и ещё парочку.
Ого... много всего. Дня 3 уйдёт на изучение...

У каждого способа свои плюсы и минусы и про каждый способ можно целую большую статью написать
Вот, есть повод поучаствовать в "конкурсе лучших", заодно и народ просветить
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Ого... много всего. Дня 3 уйдёт на изучение...
Вот, есть повод поучаствовать в "конкурсе лучших", заодно и народ просветить
3 месяца скорее уйдет, а не 3 дня, так как это вершина айсберга. Врятли кто-то освоит такой объем материала, а делать статью на конкурсе особого смысла нету, тем более в книгах уже давно все разжевано.
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)