Я работаю над миграцией базы данных в приложении Windows. Ранее это была база данных доступа (file.accdb), и я переносил ее в базу данных Sql Azure. У меня проблема со временем загрузки при запуске приложения. Время загрузки увеличилось с ~ 5 секунд до более чем 600 секунд. Я обнаружил проблему, и именно этот метод ...
private void LoadPSDTestPSDResult()
{
String sqlQuery = "SELECT * FROM PSDTestPSDResultEuro";
string sqlQuery2 = "SELECT * from PSDTestPSDResultEuroExtended WHERE SampleID = @sampleId AND PartAn = @partAn";
using (DataTable results = LoadTable(sqlQuery))
{
foreach (DataRow row in results.Rows)
{
PSDTestPSDResultEuro newData = new PSDTestPSDResultEuro
{
SampleID = (Int32)row["SampleID"]
};
if (row["PartAn"] != DBNull.Value)
newData.PartAn = (bool)row["PartAn"];
if (row["0"] != DBNull.Value)
newData.Sep_0 = (Double)row["0"];
if (row["0,036"] != DBNull.Value)
newData.Sep_0_036 = (Double)row["0,036"];
if (row["0,05"] != DBNull.Value)
newData.Sep_0_05 = (Double)row["0,05"];
if (row["0,063"] != DBNull.Value)
newData.Sep_0_063 = (Double)row["0,063"];
if (row["0,074"] != DBNull.Value)
newData.Sep_0_074 = (Double)row["0,074"];
if (row["0,125"] != DBNull.Value)
newData.Sep_0_125 = (Double)row["0,125"];
if (row["0,25"] != DBNull.Value)
newData.Sep_0_25 = (Double)row["0,25"];
if (row["0,5"] != DBNull.Value)
newData.Sep_0_5 = (Double)row["0,5"];
if (row["1"] != DBNull.Value)
newData.Sep_1 = (Double)row["1"];
if (row["2"] != DBNull.Value)
newData.Sep_2 = (Double)row["2"];
if (row["3,15"] != DBNull.Value)
newData.Sep_3_15 = (Double)row["3,15"];
if (row["4"] != DBNull.Value)
newData.Sep_4 = (Double)row["4"];
if (row["5"] != DBNull.Value)
newData.Sep_5 = (Double)row["5"];
if (row["5,6"] != DBNull.Value)
newData.Sep_5_6 = (Double)row["5,6"];
if (row["6,3"] != DBNull.Value)
newData.Sep_6_3 = (Double)row["6,3"];
if (row["7,1"] != DBNull.Value)
newData.Sep_7_1 = (Double)row["7,1"];
if (row["8"] != DBNull.Value)
newData.Sep_8 = (Double)row["8"];
if (row["9"] != DBNull.Value)
newData.Sep_9 = (Double)row["9"];
if (row["10"] != DBNull.Value)
newData.Sep_10 = (Double)row["10"];
if (row["11,2"] != DBNull.Value)
newData.Sep_11_2 = (Double)row["11,2"];
if (row["12,5"] != DBNull.Value)
newData.Sep_12_5 = (Double)row["12,5"];
if (row["14"] != DBNull.Value)
newData.Sep_14 = (Double)row["14"];
if (row["16"] != DBNull.Value)
newData.Sep_16 = (Double)row["16"];
if (row["18"] != DBNull.Value)
newData.Sep_18 = (Double)row["18"];
if (row["20"] != DBNull.Value)
newData.Sep_20 = (Double)row["20"];
if (row["22,4"] != DBNull.Value)
newData.Sep_22_4 = (Double)row["22,4"];
if (row["25"] != DBNull.Value)
newData.Sep_25 = (Double)row["25"];
if (row["28"] != DBNull.Value)
newData.Sep_28 = (Double)row["28"];
if (row["31,5"] != DBNull.Value)
newData.Sep_31_5 = (Double)row["31,5"];
if (row["35,5"] != DBNull.Value)
newData.Sep_35_5 = (Double)row["35,5"];
if (row["40"] != DBNull.Value)
newData.Sep_40 = (Double)row["40"];
if (row["45"] != DBNull.Value)
newData.Sep_45 = (Double)row["45"];
if (row["50"] != DBNull.Value)
newData.Sep_50 = (Double)row["50"];
if (row["56"] != DBNull.Value)
newData.Sep_56 = (Double)row["56"];
if (row["63"] != DBNull.Value)
newData.Sep_63 = (Double)row["63"];
if (row["71"] != DBNull.Value)
newData.Sep_71 = (Double)row["71"];
if (row["80"] != DBNull.Value)
newData.Sep_80 = (Double)row["80"];
using (SqlCommand command = new SqlCommand(sqlQuery2, conn, trans))
{
command.Parameters.AddWithValue("@sampleId", newData.SampleID);
command.Parameters.AddWithValue("@partAn", newData.PartAn);
using (DataTable extendedRow = new DataTable())
{
extendedRow.Load(command.ExecuteReader());
if (extendedRow.Rows.Count > 0)
{
DataRow row2 = extendedRow.Rows[0];
if (row2["90"] != DBNull.Value)
newData.Sep_90 = (Double)row2["90"];
if (row2["100"] != DBNull.Value)
newData.Sep_100 = (Double)row2["100"];
if (row2["112,5"] != DBNull.Value)
newData.Sep_112_5 = (Double)row2["112,5"];
if (row2["125"] != DBNull.Value)
newData.Sep_125 = (Double)row2["125"];
if (row2["150"] != DBNull.Value)
newData.Sep_150 = (Double)row2["150"];
if (row2["200"] != DBNull.Value)
newData.Sep_200 = (Double)row2["200"];
if (row2["250"] != DBNull.Value)
newData.Sep_250 = (Double)row2["250"];
if (row2["300"] != DBNull.Value)
newData.Sep_Over250 = (double)row2["300"];
}
}
}
m_Database.PSDTestPSDResultEuro.Add(newData);
}
}
}
Я пробовал несколько разных решений, делающих LoadPSDTestPSDResult параллельным и async-await. Это не решило проблему. Это даже не запустит программу как "тайм-аут выполнения" из-за памяти?
Мне сказали, что я могу попытаться установить индексы, чтобы увидеть, что не происходит неправильный цикл?
Я мог бы также задать запрос через базу данных вместо логики (кода)?
Есть ли какие-нибудь советы по «увеличению» времени загрузки, о которых я могу прочитать, или как мне лучше всего подойти к этой проблеме?
Я с удовольствием отредактирую вопрос, чтобы сделать его более понятным
Это первая миграция, которую я делаю. Я только что закончила школу, и это моя первая работа!