Создавайте, храните и извлекайте динамические данные с помощью C # - PullRequest
2 голосов
/ 12 марта 2012

У меня одновременно запущено несколько действий. Когда действие 1 завершено - за ним следует действие Nr.2, затем 3, затем 1 или 9 или 9 снова или 10 или 7 ... в случайной последовательности.

enter image description here

Мне нужно:

  1. Хранить данные, которые я получаю в результате действия / действия.

  2. Получить эти данные, когда продолжается то же действие!

Я могу определить действия:

  • по уникальному идентификатору

Вот как я это себе представляю:

  1. Запустить программу.

  2. Первый шаг - проверить, существуют ли данные для нового действия - по этой причине мы получаем идентификатор и делаем проверку.

  3. Поскольку это наше новое / первое действие / действие, в нем нет данных прошлого, поэтому к концу действия мы создаем и сохраняем новые данные в какое-то динамическое хранилище.

    string [,] ID123 = новая строка [2, 3] {{"120", "200", "# ffc90e"}, {"380", "200", "# 22b14c"}};

  4. Когда Действие 1 завершено, Действие 2 начинается. Практически мы делаем то же, что и в п.3.

    string [,] ID456789 = новая строка [2, 3] {{"10", "5", "# 40"}, {"6", "8", "# 80"}};

  5. Теперь снова занятие 1! Мы идентифицируем его по уникальному ID . На этот раз, если мы будем искать существующие данные, мы найдем это:

    string [,] ID123 = новая строка [2, 3] {{"120", "200", "# ffc90e"}, {"380", "200", "# 22b14c"}};

  6. Теперь я делаю редактирование + , добавляя новые значения при необходимости. Продолжить.

Одно из самых простых решений, о которых я подумал, - просто создать временный файл с именем " ID .txt". К сожалению, у меня будет до 10-15 действий, выполняемых одновременно, поэтому этот подход не будет таким быстрым, как если бы я только что записал все в память .. Вопрос в том - как мне это сделать? sql? TXT

Некоторые факты:

  • ID всегда разные для разные Активность

  • Я не знаю точный счет активности (варьируется от 10 до 15)

  • Мне нужно будет хранить данные типа массива, т.е.

строка [,] массив: 1, 15, 32, 12

2, 11, efg, 0

5, 9, 5, abc

...

  • аналогичный вопрос: Динамический массив в C #

  • в моем коде будут некоторые условия, которые вызовут «удаление данных», у действий есть срок жизни;)

1 Ответ

1 голос
/ 12 марта 2012

Неясно, чего вы пытаетесь достичь здесь, где и как действия входят в эту цепочку и как вам нужно с ними справляться.

Что касается отслеживания того, что в данный момент происходит, все, что вам нужно, - это правильный параллелизм. Есть несколько объектов, встроенных в .NET 4.0, которые вы можете использовать или создавать свои собственные. Поскольку эти данные являются динамическими, их, вероятно, не следует сохранять, если только вы не ожидаете, что ваш процесс сможет точно определить, где он остановился после завершения. Таким образом, вы можете, например, использовать ConcurrentDictionary<string, string[,]>, в котором будут храниться двумерные массивы, снабженные строкой идентификатора, которая должна быть уникальной в Словаре (даже если массивы двух идентификаторов имеют одинаковые размеры и значения). Проверка на параллелизм является встроенной, что означает, что вы можете иметь несколько потоков, выполняющих несколько действий над этим Словарём, не беспокоясь о «условиях гонки», когда два потока могут пытаться читать или записывать одно и то же одновременно.

Имейте в виду, что данные в памяти как часть вашего процесса по какой-либо причине прекратят свое существование по окончании процесса. Если вы не хотите, чтобы это произошло, у вас может быть поток, задачей которого является сохранение содержимого ConcurrentDictionary в файл или базу данных. Поскольку это один поток, считывающий потокобезопасную коллекцию данных, проблемы параллелизма в записи файлов в значительной степени избегаются. КАК ДОЛГО КАК одна запись в ConcurrentDictionary не зависит от данных в другой (вы все равно можете иметь дело со случаями, когда одна запись запись зависит от другого, но она становится более сложной). Этот поток может быть «запущен» во время выполнения других действий, или на основе таймера, или чего бы вы ни выбрали для удовлетворения ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...