Я бы сказал, что LINQtoSQL может быть не лучшим выбором для такого рода приложений. Когда вы говорите о стольких объектах, вы сталкиваетесь с большими издержками при создании экземпляров объектов (ваших постоянных классов).
Я бы выбрал решение, в котором хранимая процедура извлекает только необходимые данные через ADO.NET, приложение хранит их в памяти (в настоящее время память дешевая, 200 МБ не должно быть проблемой), а алгоритм анализа запускается на входе. данные памяти.
Не думаю, что вы должны хранить данные в файле. В конце концов, ваша база данных - это просто один или несколько файлов, которые считываются ядром базы данных. Таким образом, вы либо
- пусть ядро базы данных прочитает ваши данные и вы проанализируете их, или
- пусть ядро базы данных читает ваши данные, вы записываете их в файл, читаете файл (снова читаете те же данные, но теперь вы делаете это сами) и анализируете данные
Последний вариант включает в себя много накладных расходов без каких-либо преимуществ, насколько я вижу.
РЕДАКТИРОВАТЬ: Если ваши данные изменяются очень редко, вы можете рассмотреть возможность предварительной обработки данных перед анализом и кэшированием предварительно обработанных данных где-либо (в базе данных или в файловой системе). Это имеет смысл, только если ваши предварительно обработанные данные могут быть проанализированы (намного) быстрее, чем необработанные данные. Может быть, некоторая предварительная обработка может быть выполнена в самой базе данных.