Начал изучать C#. Проблема вот в чем. Подключаюсь базе используя стандартный коннектор, получаю данные. Но вот преобразование этих данных происходит очень медленно. Количество строк 50000 - 150000, по времени преобразование занимает 30-60 сек. Хотя сам запрос и получение данных из БД происходит менее чем за 1 сек.
Возможно ли как-то ускорить этот процесс???
Причем на отладчике видно что в это время происходит очень частая сборка мусора подозреваю что в этом причина. Класс Price имеет три свойства. Код следующий:
List<Price> Prices = new List<Price>();
Db_Connection.Open();
MySqlDataReader myReader = commandDatabase.ExecuteReader();
if (myReader.HasRows)
{
int i = 0;
while (myReader.Read())
{
Prices.Add(new Price());
Prices[i].Timestamp = Convert.ToInt32(ConvertToUnixTimestamp(myReader.GetString(1)));
Prices[i].Bid = Convert.ToDouble(myReader.GetString(2));
Prices[i].Ask = Convert.ToDouble(myReader.GetString(3));
i++;
}
}
Db_Connection.Close();
Докопался до причины. Оказалось все просто. Виновата функция
static double ConvertToUnixTimestamp(string date_str)
{
DateTime date = DateTime.Parse(date_str, new CultureInfo("ru-RU"));
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0);
TimeSpan diff = date - origin;
return Math.Floor(diff.TotalSeconds);
}
Т.к. при конвертировании каждый раз создаются 2 объекта new CultureInfo("ru-RU") и new DateTime(1970, 1, 1, 0, 0, 0) это порождает большое количество мусора. В таком виде работает быстрее.
static CultureInfo Culture = new CultureInfo("ru-RU");
static DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0);
public static double ConvertToUnixTimestamp(string date_str)
{
DateTime date = DateTime.Parse(date_str, Culture);
TimeSpan diff = date - origin;
return Math.Floor(diff.TotalSeconds);
}
Теперь на преобразование 60000 записей тратится 0,25 сек. вместо 30-40 сек. Всем спасибо за участие.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Какая разница между этими двумя класами? Что в первом универсальный тип данных - что во второмБолее того, насколько я знаю, компилятор тип...
Всем привет :) Как можно добавить InitialDirectory для FileDialog в файл конфигурации XML?
Есть кусок кода, который формирует путь по шаблону с добавлением выбранных пунктовWorkerList - это и есть ComboBox