У меня есть script, который работает около 4 минут 30 секунд, и я изменил время ожидания по умолчанию на 3600 секунд на странице конфигурации моей веб-страницы aspx.
Он не вернул 500 - ошибка времени ожидания запроса на версию разработки и загруженную версию на IIS 8.
Однако, когда я загрузил его на сайт live на azure, он возвращает 500 - Ошибка времени ожидания запроса.
Заменяет ли Azure эти параметры?
Configs:
<configuration>
<system.web>
<httpRuntime executionTimeout="3600" />
<sessionState timeout="360" />
<compilation debug="false" targetFramework="4.0">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral/>
</assemblies>
</compilation>
</system.web>
</configuration>
EDIT:
Я добавил SCM_COMMAND_IDLE_TIMEOUT в параметры приложения azure со значением 3600, но он не исправил ошибку, пытаясь улучшить производительность моего кода сейчас:
Оригинал:
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Dictionary<int, Dictionary<DateTime, float>> d_PhoneNo_DateDataList = new Dictionary<int, Dictionary<DateTime, float>>();
string sqlcommand = "SELECT ---- FROM ---- INNER JOIN ---- ON ---- = ---- WHERE [email protected] AND date BETWEEN @Date1 AND @Date2";
string strConnectionString = ConfigurationManager.ConnectionStrings["---"].ConnectionString;
using (SqlConnection conn = new SqlConnection(strConnectionString))
{
Dictionary<DateTime, float> d_DateTime_Data;
using (SqlCommand cmd = new SqlCommand(sqlcommand, conn))
{
cmd.Parameters.Add("@PhoneNo", SqlDbType.Int);
cmd.Parameters.AddWithValue("@Date1", dateStart);
cmd.Parameters.AddWithValue("@Date2", dateEnd.AddDays(1));
conn.Open();
for (int i = 0; i < phoneNo.Count; i++)
{
d_DateTime_Data = new Dictionary<DateTime, float>();
cmd.Parameters["@PhoneNo"].Value = phoneNo[i];
cmd.ExecuteNonQuery();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
d_DateTime_Data.Add(DateTime.Parse(reader["Date"].ToString()), float.Parse(reader["Data"].ToString()));
}
}
d_PhoneNo_DateDataList.Add(phoneNo[i], d_DateTime_Data);
}
conn.Close();
}
}
Я попытался использовать concurrentDictionary с Parallel.For, но он создает проблемы с DataReader
ConcurrentDictionary<int, Dictionary<DateTime, float>> d_PhoneNo_DateDataList = new ConcurrentDictionary<int, Dictionary<DateTime, float>>();
string sqlcommand = "SELECT ---- FROM ---- INNER JOIN ---- ON ---- = ---- WHERE [email protected] AND date BETWEEN @Date1 AND @Date2";
string strConnectionString = ConfigurationManager.ConnectionStrings["----"].ConnectionString;
using (SqlConnection conn = new SqlConnection(strConnectionString))
{
Dictionary<DateTime, float> d_DateTime_Data;
using (SqlCommand cmd = new SqlCommand(sqlcommand, conn))
{
cmd.Parameters.Add("@PhoneNo", SqlDbType.Int);
cmd.Parameters.AddWithValue("@Date1", dateStart);
cmd.Parameters.AddWithValue("@Date2", dateEnd.AddDays(1));
conn.Open();
Parallel.For(0, phoneNo.Count, (index) =>
{
d_DateTime_Data = new Dictionary<DateTime, float>();
cmd.Parameters["@PhoneNo"].Value = phoneNo[index];
cmd.ExecuteNonQuery();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
d_DateTime_Data.Add(DateTime.Parse(reader["Date"].ToString()), float.Parse(reader["Data"].ToString()));
}
}
d_PhoneNo_DateDataList.TryAdd(phoneNo[index], d_DateTime_Data);
});
conn.Close();
}
}