Мое предложение было бы не пытаться анализировать большую часть файла, как вы делаете сейчас, а пойти на что-то вроде этого:
using (var reader = File.OpenText("<< filename >>"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string[] parts = line.Split(',');
// Process the different parts of the line here.
}
}
Главное отличие здесь в том, что вы не разбираете концы строк и не разделяете их запятыми. Преимущество заключается в том, что при использовании высокоуровневых методов, таких как ReadLine()
, StreamReader
(который возвращает File.OpenText()
) может оптимизироваться для чтения файла построчно. То же самое касается String.Split()
.
Использование этих методов высокого уровня почти всегда будет быстрее, чем когда вы анализируете буфер самостоятельно.
При описанном выше подходе вам больше не нужно использовать StringBuilder
, и вы можете просто получить свои значения следующим образом:
tick = int.Parse(parts[0]);
symbol = short.Parse(parts[1]);
value = decimal.Parse(parts[2]);
dayData[symbol][name][tick] = value;
Я не подтвердил приведенный выше фрагмент; проверьте правильность этих строк или исправьте их в соответствии со своей бизнес-логикой.