Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Многопоточный перебор ключей реестра

7
05 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Есть задача реализовать сабж.Перебор не рекурсивный,в пределах одной ветки(но большой,типа HKCR).Совершенно нет идей,как это дело распараллелить,потому как с потоками не работал почти
Единственное,что приходит в голову—основной поток делает работу по перечислению,а порождённые—собственно анализируют результаты его деятельности.А уж как их порождать(фиксированное число,или базироваться на чём-то) и как хранить данные основного потока,ума не приложу.Прошу совета умных людей
14
05 февраля 2012 года
Phodopus
3.3K / / 19.06.2008
А смысл? Я не думаю что выигрыш в скорости будет.
7
05 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Не,ну почему же?То мы ищем следующий ключ только после обработки текущего,а то ишем по порядку,параллельно их обрабатывая
1
05 февраля 2012 года
kot_
7.3K / / 20.01.2000
а получат ли все потоки доступ к реестру?
7
05 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Получат,с чего б им не получить-то?:) Монопольщиной там не пахнет,изменения ключей не будет тоже,только чтение
14
07 февраля 2012 года
Phodopus
3.3K / / 19.06.2008
Так что именно ты там перебирать будешь? А то как бэ.. зависит.
Не будет выигрыша в скорости. ИМХО.
7
07 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Ключи в подключе,один уровень
Пришлось всё же работу по перебору возложить на каждый поток,ибо если основной будет формировать строки с именами,то я застрелюсь в обрабатывающих делать синхронизацию по их использованию
(тестовую версию пишу)
5
07 февраля 2012 года
hardcase
4.5K / / 09.08.2005
C#: PLINQ + TPL
7
07 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: hardcase
C#: PLINQ + TPL


> Win32 API

(ну т.е. C# точно не нужен)

5
07 февраля 2012 года
hardcase
4.5K / / 09.08.2005
Цитата: @pixo $oft
> Win32 API

Ты намекаешь на то, что с Win API нельзя работать из C#?
Вполне себе можно. А для работы с реестром есть вполне годное API. Для распараллеливания также есть инструменты, которые я назвал постом ранее: PLINQ для создания алгоритмов с параллелизмом по данным и TPL для параллелизма по задачам.

7
07 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: hardcase
Ты намекаешь на то, что с Win API нельзя работать из C#?
Вполне себе можно

Нет,даже не подразумевал.Просто ветка форума про Win32 API,а не про C#

Цитата: hardcase
Для распараллеливания также есть инструменты, которые я назвал постом ранее: PLINQ для создания алгоритмов с параллелизмом по данным и TPL для параллелизма по задачам.

Ага,только оно всё не в том,где я работаю

5
08 февраля 2012 года
hardcase
4.5K / / 09.08.2005
Цитата: @pixo $oft
Ключи в подключе,один уровень

И много ли там подключей? Я правильно понял что с каждым подключем связана какая-то ресурсоемкая операция?

7
08 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: hardcase
И много ли там подключей?

Ну тыщ 10,около того

Цитата: hardcase
Я правильно понял, что с каждым подключем связана какая-то ресурсоемкая операция?

Вполне

5
08 февраля 2012 года
hardcase
4.5K / / 09.08.2005
Цитата: @pixo $oft
Ну тыщ 10,около тогоВполне


Все же я покажу пример параллельной обработки:

Код:
using System.Linq;
using Microsoft.Win32;

class Program
{
    static void Main(string[] args)
    {
        const int dop = 20;
        var rootKey = Registry.CurrentUser.OpenSubKey("FooBar");
        var result = rootKey.GetSubKeyNames()
            .AsParallel()
            .WithDegreeOfParallelism(dop)
            .Select(subKeyName => DoWork(rootKey.OpenSubKey(subKeyName)))
            .ToList(); // вычисляем результат, тут может быть выражение объединения результатов (например Aggregate)
    }

    static int DoWork(RegistryKey key)
    {
        // что-то делаем
        return key.Name.GetHashCode();
    }
}


Дисклеймер: это только пример, в промышенном коде необходмы using-и.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог