Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2016, 02:31   #11
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
если у вас есть пропуски, значит вы снова перечитываете файл.

вы вообще читаете мои ответы?

вы не переоткрываете файл, вы читаете подряд.
конечно читаю ваши ответы, да, я понимаю что подряд, если я распределяю чтение из файла , значит пропускается 50 строк, т.к. если первый ридер читает первые 50 строк, второй же должен пропустить эти 50 строк, т.к. они уже прочитаны первым ридером, я правильно понимаю ?
komra2 вне форума Ответить с цитированием
Старый 27.10.2016, 02:32   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не должно быть двух ридеров.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.10.2016, 02:39   #13
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
не должно быть двух ридеров.
оййхх, цикл а не ридер, в цикл же можно прописать команду, которая будет пропускать 50 строк из тхт?
komra2 вне форума Ответить с цитированием
Старый 27.10.2016, 04:02   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы упомянули два ридера.

как напишете цикл, так он и будет работать, это банальный for.


и да, повторю, а надо ли оно вообще разбивать по 50.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.10.2016, 11:02   #15
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

проблему решил вроде....
komra2 вне форума Ответить с цитированием
Старый 31.10.2016, 02:55   #16
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы упомянули два ридера.

как напишете цикл, так он и будет работать, это банальный for.


и да, повторю, а надо ли оно вообще разбивать по 50.
И вче таки не решил, то что у меня вышло, это только 5% от того что мне надо.....
komra2 вне форума Ответить с цитированием
Старый 31.10.2016, 10:42   #17
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от komra2 Посмотреть сообщение
Есть, к примеру txt в котором есть текст построчно записанный(строки все одинаковой длинны), возможно ли многими "кусками" считывать этот текст, то есть первый стримридер считал строки от 1 до 50 строки, второй стримридер от 51 до 100-ой, потом снова первый от 101-ой до 150-ой строки ? Я не говорю про основы языка....
Можно то оно можно. Только если у вас поток из файла читается, то производительность будет никакая.
В любом случае, лучше одним потоком читать данные, а другими их обрабатывать.
Прочитал 50 строк - отдал другому потоку на обработку этих 50 строк. Прочитал еще 50 строк - еще какому-нибудь потоку отдал.
pu4koff вне форума Ответить с цитированием
Старый 31.10.2016, 14:19   #18
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Прочитал 50 строк - отдал другому потоку на обработку этих 50 строк. Прочитал еще 50 строк - еще какому-нибудь потоку отдал.

Именно так и мне и надо, но я не знаю как код написать Я с таким не работал еще, было похожее но не это
komra2 вне форума Ответить с цитированием
Старый 31.10.2016, 14:44   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я говорил как это все делать.

для чтения самое просто что можно делать это ConsumerProducer.
благо стандартный класс BlockingCollection позволяет легко это делать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.10.2016, 15:09   #20
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Код:
class Program
    {
        const int BlockSize = 3; // количество строк в блоке

        static void ThreadFunc(object state) // обработка блока строк в отдельном потоке
        {
            var lines = state as IEnumerable<string>;
            foreach (var line in lines) // перебираем строки
                Console.WriteLine("Thread: {0}\tLine: {1}", Thread.CurrentThread.ManagedThreadId, line);
            Console.WriteLine("End thread\tFirst line:{0}\tEndLine:{1}", lines.First(), lines.Last());
        }

        static void Main(string[] args)
        {
            using (var reader = new StreamReader(@"D:\test.txt"))
            {
                var lines = new List<string>(); // коллекция для сбора блока строк из файла
                for (;;)
                {
                    var str = reader.ReadLine();
                    if (string.IsNullOrEmpty(str)) // файл дочитали до конца
                    {
                        if (lines.Count > 0) // в коллекции остались не отправленные на обработку строки
                        {
                            Console.WriteLine("Start Thread\tFirst line:{0}\tEndLine:{1}", lines[0], lines[lines.Count-1]);
                            ThreadPool.QueueUserWorkItem(ThreadFunc, lines); // берём поток из пула и выполняем обработку блока строк
                        }
                        break;
                    }
                    lines.Add(str);
                    if (lines.Count == BlockSize) // прочитали нужное число строк из файла, значит можно блок строк отправлять на обработку в другой поток
                    {
                        Console.WriteLine("Start Thread\tFirst line:{0}\tEndLine:{1}", lines[0], lines[lines.Count - 1]);
                        ThreadPool.QueueUserWorkItem(ThreadFunc, lines); // берём поток из пула и выполняем обработку блока строк
                        lines = new List<string>();
                    }
                }
            }

            Console.ReadKey();
        }
    }
Можно на Task'ах запились, можно свой пул потоков сделать и еще всяко извратиться.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточный curl nibufep PHP 2 05.04.2015 19:46
Режимы компиляции Многопоточный MT и Многопоточный DLL vasiatka Общие вопросы C/C++ 5 20.02.2014 19:56
c#. Многопоточный сервер tiger Помощь студентам 1 13.09.2012 13:24
многопоточный сервер мандарин Работа с сетью в Delphi 6 24.04.2007 07:22
Многопоточный Ping Квэнди Работа с сетью в Delphi 0 18.12.2006 15:01