Тест записи сделок в файловое хранилище (на базе примера SmpleStorage со своим генератором экземпляров класса Trade и хранением на диске вместо записи в память) привел к следующим наблюдениям:
1.Конструктор "public FileStorage(string directory)" - не ясно, какая именно директория подразумевается. Какую бы я строку не задавал, пишет в текущую директорию (и читает с нее же). Может, я неправильно понимаю этот параметр? Выкрутился тем, что после создания экземпляра TradingStorage задаю нужное место хранения данных используя BasePath. Вполне возможно, что у параметра directory из конструктора FileStorage есть какой-то другой смысл, но разобраться в этом из документации я не смог.
2. Повторной запись всего набора данных после добавления свежих записей ведет к удвоению бывшей последней записи. На примере. Если я за сегодня записал 10 экземпляров класса Trade со значением Id от 1 до 10, то при добавлении следующих 10 трейдов к исходному списку и повторному его сохранению, имею следующий результат: при чтении получу 21 запись (вместо ожидаемых 20), где все записи будут уникальные, кроме одного исключения - трейд за номером 10 (бывший последний) будет записан два раза с одним и тем же Id. Похоже на баг, т.к. мой здравый смысл подсказывает, что при повторной записи всего набора или все записи должны удваиваться, или ни одна из них. Замечу, что такое поведение наблюдается при AppendOnlyNew = true (интерфейс IMarketDataStorage<T>), если же установить AppendOnlyNew = false все записи будут просто дублироваться, как и ожидается по смыслу.
3. Если для экземпляров каждой из записей класса Trade в списке не задавать значение Security, то сохранить список трейдов в TradeStorage невозможно, т.к. генерируется ошибка. Признаться, я посчитал, что если стоит атрибут [Ignore] в определении класса перед соответствующим полем, то можно не задавать лишнее - ведь все равно при вызове IMarketDataStorage<Trade> GetTradeStorage(Security security) мы задаем единое значение security для всего набора записываемых данных. Зачем лишние операции на каждую единицу хранения?! Но почему-то [Ignore] не работает. Или я в этом месте неправильно понимаю логику.