У меня есть генетическая программа (C#), которая использует данные финансовых временных рядов, и в настоящее время она работает, но я хочу перепроектировать архитектуру, чтобы сделать ее более надежной. Мои основные цели:
- последовательно представлять данные временных рядов деревьям выражений.
- разрешить деревьям выражений доступ к предыдущим строкам данных, когда это необходимо.
- для оптимизации производительности доступа к данным при оценке деревьев выражений.
- сохраняйте общий интерфейс, чтобы можно было использовать различные типы данных.
Вот возможные подходы, о которых я думал:
- Я могу оценить дерево выражения, передав строку данных в корневой узел и позволив каждому дочернему узлу использовать одну и ту же строку данных.
- Я могу оценить дерево выражения, передав индекс строки данных и позволив каждому узлу получить строку данных из общего
DataSet
(в настоящее время я передаю индекс строки и перехожу к нескольким синхронизированным массивам для получения данных). - Гибрид: неизменяемый набор данных доступен для всех деревьев выражений, и каждое дерево выражений оценивается путем передачи строки данных.
Преимущество первого подхода заключается в том, что строка данных передается в дерево выражений, и дальнейшие запросы к набору данных не выполняются (что должно повысить производительность в многопоточной среде). Недостатком является то, что дерево выражений не имеет доступа к остальным данным (на тот случай, если некоторым функциям потребуется выполнить вычисления с использованием предыдущих строк данных).
Преимущество второго подхода заключается в том, что деревья выражений могут получить доступ к любым данным до последней строки данных, но если я не укажу, что это за строка, мне придется перебирать строки и выяснять, какая из них является последней.
Преимущество гибрида заключается в том, что он обычно должен работать лучше и по-прежнему обеспечивать доступ к более ранним данным. Он поддерживает два основных «представления» данных: последнюю строку и предыдущие строки.
Знаете ли вы, ребята, какие-либо шаблоны проектирования или у вас есть какие-либо советы, которые могут помочь мне построить систему такого типа? Должен ли я использовать DataSet для хранения и представления данных, или есть более эффективные способы представления строк данных при сохранении простого интерфейса?
К вашему сведению: весь мой код написан на C#.