Я размещаю .Net Web Api на лазурном, api просто обновляет одну строку в базе данных сервера sql. Вот мой Updatecode:Azure Entityframework SaveChanges Very Slow
using (Storage ctx = new Storage())
{
string json = JsonConvert.SerializeObject(ev, _jsonsettings);
Data ex = ctx.dbsData.FirstOrDefault();
if (ex == null)
ctx.dbsData.Add(new Data() { Json = json, LastUpdate = DateTime.Now });
else
{
ex.Json = json;
ex.LastUpdate = DateTime.Now;
ctx.Entry(ex).State = EntityState.Modified;
}
ctx.SaveChanges();
return new HttpResponseMessage(HttpStatusCode.OK);
}
и у меня есть второй метод, который только очищает таблицу:
[HttpDelete]
public HttpResponseMessage Clear()
{
using (Storage ctx = new Storage())
{
ctx.dbsData.RemoveRange(ctx.dbsData);
ctx.SaveChanges();
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
Смотрите также мой DbContext Класс:
public class Storage : DbContext
{
public DbSet<Data> dbsData { get; set; }
public Storage(string connectionstring) : base(connectionstring)
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
Configuration.ValidateOnSaveEnabled = false;
Configuration.AutoDetectChangesEnabled = false;
}
public Storage() : this("tom")
{
}
}
Моя проблема в том, что оба методы чрезвычайно медленны. Я обнаружил, что если я удалю команду SaveChanges(), она выполняется быстрее. Поэтому мой вопрос заключается в том, как я могу повысить производительность и почему это так долго, чтобы обновлять/удалять одну строку?
Причина, по которой это происходит быстрее, когда вы удаляете SaveChanges(), потому что без нее ваш db не обновляется. SaveChanges() - это точка, в которой запрос действительно выполняется в вашей базе данных. для одной строки это не должно быть медленным. Однако нужна ли больше информации, насколько велики данные json, которые вы сохранили в одном из столбцов? это сэкономит в конце концов или это просто время? – MartinM
Я знаю, что savechanges() обновляет базу данных. Я не понимаю, почему он медленный (~ 10 секунд). Мой json имеет размер около 500 кб. Если я попробую его локально на моем сервере sqlexpress, он будет храниться незамедлительно без каких-либо задержек. –
Не могли бы вы предоставить более подробную информацию о том, что Azure вы используете? Является ли это службой VM или App с Azure SQL Database? Когда вы пытаетесь локально, вы имеете в виду, что вы устанавливаете строку подключения Azure WebApi к локальному sqlexpress? Вы пытались установить свою локальную строку соединения в базу данных Azure SQL? –