Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 68
.NET 4.x

Какие потоки лучше при обработки небольшого объёма информации, но при большом количестве потоков

12.02.2014, 19:27. Показов 3505. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно заинтересовали следующие вопросы:
  1. Какой из потоков работает быстрее?
  2. Какой из потоков стартует быстрее?
  3. Какие потоки лучше при обработки небольшого объёма информации, но при большом количестве потоков ?
  4. Какие потоки лучше при обработки большого объёма информации, но при небольшом количестве потоков ?
  5. Какой поток лучше для работы асинхронно?
  6. Какой поток Вы считаете лучшим и почему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2014, 19:27
Ответы с готовыми решениями:

Ошибки на большом количестве потоков с сокетами
У меня проблема следующего характера, есть многопоточное приложение которое парсит по спискам ссылок инфу. Каждый поток выполняет следующий...

Зависание Excel-я при попытке копирования небольшого объёма информации
Добрый день! Не могу разобраться с проблемой. Есть файл (во вложении), при попытке копирования из него фио + сумм виснет эксель. Компьютер...

Json не сработал при большом количестве информации
отдельно ссылки проверял, обе работают, когда пытаюс ьдекодировать в json - первая работает, а вторая нет, почему? 1 код: $urlsItem =...

25
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
13.02.2014, 19:21
Студворк — интернет-сервис помощи студентам
Ну раз такое дело то вот мой код для поиска строки :-)

Programm.cs
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication
{
    class Program
    {
        private static readonly object LockObject = new object();
        private static readonly Dictionary<uint, string> Dictionary = new Dictionary<uint, string>(); 
 
        static void Main()
        {
            var watch = new Stopwatch();
            watch.Start();
            GenerateData();
            watch.Stop();
            Console.WriteLine("Время генeрации данных: {0} ms", watch.ElapsedMilliseconds);
            watch.Restart();
            var data = LoadData();
            watch.Stop();
            Console.WriteLine("Время загрузки данных: {0} ms", watch.ElapsedMilliseconds);            
            watch.Restart();
            var crc32 = new CrcTools();
            data.AsParallel().ForAll(element =>
                {
                    var key = crc32.CalculateCRC(element);
                    lock (LockObject)
                    {
                        if (!Dictionary.ContainsKey(key))
                            Dictionary[key] = element;
                    }
                });
            watch.Stop();
            Console.WriteLine("Время подготовки данных: {0} ms", watch.ElapsedMilliseconds);            
            Console.Write("Введите искомое значение: ");
            var value = Console.ReadLine();
            watch.Restart();
            var numberKey = crc32.CalculateCRC(value);
            var resultFind = Dictionary.ContainsKey(numberKey);
            watch.Stop();
            Console.WriteLine("Поиск значения: {0}, Время поиска: {1} ms", resultFind, watch.ElapsedMilliseconds);
            Console.ReadLine();
        }
 
        public static void GenerateData()
        {
            const int  n = 10000000;
            var data = new List<int>();
            var result = new StringBuilder();
            for (var i = 0; i < n; i++)
                data.Add(i);
            data.AsParallel().ForAll(element =>
                {
                    lock (LockObject)
                    {
                        result.AppendFormat("{0}\r\n", element);                        
                    }
                });
            File.WriteAllText("E:\\data.txt",  result.ToString());
        }
 
        public static IEnumerable<string> LoadData()
        {
            using (var file = File.OpenRead("E:\\data.txt"))
            using (var reader = new StreamReader(file))
                while (!reader.EndOfStream)
                    yield return reader.ReadLine();
        }
    }
}
CRCTools.cs
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
using System.Linq;
using System.Text;
 
namespace ConsoleApplication
{
    public class CrcTools
    {
        public CrcTools()
        {
            uint Crc32;
            TableCRC32 = new uint[256];
            for (uint i = 0; i < 256; i++)
            {
                Crc32 = i;
                for (int j = 8; j > 0; j--)
                    Crc32 = ((Crc32 & 1) == 1) ? (Crc32 >> 1) ^ POLYNOMIAL : Crc32 >> 1;
                TableCRC32[i] = Crc32;
            }
        }
 
        public uint CalculateCRC(string value)
        {
            var result = 0xFFFFFFFF;
            var data = Encoding.ASCII.GetBytes(value).ToList();
            data.ForEach(element =>
                {
                    result = ((result) >> 8) ^ TableCRC32[element ^ ((result) & 0x000000FF)];
                });
            return ~result;
        }
 
 
        private const uint POLYNOMIAL = 0xEDB88320;
        private uint[] TableCRC32 { get; set; }
    }
}
Миниатюры
Какие потоки лучше при обработки небольшого объёма информации, но при большом количестве потоков  
1
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
13.02.2014, 20:40
Цитата Сообщение от FerroDS Посмотреть сообщение
Yukikaze, спасибо за данный тест.
т.е. из теста следует, что лучше всего использовать LINQ...

Никогда ещё не использовал LINQ.
нет, из теста следует, что с файловой системой безсмыслено использовать потоки. Все упирается в скорость чтения с жесткого диска, а переключение контекста только тормозит этот процесс

Добавлено через 7 минут
Цитата Сообщение от агерон Посмотреть сообщение
var data = LoadData();
* * * * * * watch.Stop();
* * * * * * Console.WriteLine("Время загрузки данных: {0} ms", watch.ElapsedMilliseconds)
Кстати здесь всегда будет значение стремящееся к нулю, ибо в коде производится отложенное выполнение загрузки
1
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 68
13.02.2014, 22:32  [ТС]
Yukikaze, просто сделал тест у себя.
Результаты аналогичны, а именно LINQ быстрее всего справился.

Нужно будет ещё рассмотреть вариант: TASK.
0
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 68
15.02.2014, 20:30  [ТС]
Ещё комментарии?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
15.02.2014, 21:33
FerroDS, без разницы что это, Task, BackgroundWorker, Thread все эти обертки работают с одинаковой скоростью, здесь распараллеливание никакого прироста к скорости не даст. Для увеличения производительности лучше пересмотреть метод хранения информации
1
0 / 0 / 0
Регистрация: 23.07.2013
Сообщений: 68
16.02.2014, 17:02  [ТС]
Yukikaze, а не может быть такого, что во всех потоках будет проверяться одна и та же строка?

Какой из потоков стартует быстрее?
Добавлено через 18 часов 27 минут
Можете объяснить суть использования LINQ,PLINQ?
(не совсем понимаю каким образом работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2014, 17:02

Не ляжет ли БД при большом количестве запросов
Увидел такой коммент на одном из ресурсов Добрый день, Андрей. Я пытался на сайте реализовать поиск по дополнительным полям без...

Unrecognized token при большом количестве совпадений
Здравствуйте, спасибо Вам всем большое за неоднократную помощь! Хочу предупредить сразу, что я совсем новичок. С такой ошибкой уже...

Утечка памяти при большом количестве сообщений
Есть окно сообщения.При новом сообщения создается новое окно(анимировано),старое закрывается(Close).В этом окне есть одно Image.Если много...

Вращение 3д графика при большом количестве выводимых данных
Здравствуйте. При работе в Wolfram Mathematica 9.0.1 меня посетила следующая проблема. Мне необходимо вывести данные на график в...

При большом количестве контролов форма плохо прорисовывается
Добрый день, подскажите люди добрые. Сделал игру для своего развлечения, но когда добавляю больше 30 объектов на экран, начинает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru