【发布时间】:2017-01-17 09:31:49
【问题描述】:
我在 azure 上托管一个 .Net Web Api,该 api 只是更新 sql server 数据库中的一行。这是我的更新代码:
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() 速度更快的原因是没有它,您的数据库不会更新。 SaveChanges() 是在数据库上实际执行查询的点。对于一排,它不应该很慢。但是需要更多信息,您存储在其中一列中的 json 数据有多大?它最终会保存还是只是超时?
-
我知道 savechanges() 会更新数据库。我不明白为什么它这么慢(〜10秒)。我的 json 大小约为 500kb。如果我在我的 sqlexpress 服务器上本地尝试它,它会立即存储,没有任何延迟。
-
您能否提供有关您使用什么 Azure 的更多信息?它是带有 Azure SQL 数据库的 VM 还是应用服务?当您在本地尝试时,您的意思是您将 Azure WebApi 连接字符串设置为本地 sqlexpress?您是否尝试过将本地连接字符串设置为 Azure SQL 数据库?
-
我正在使用应用服务(基本)和 sql server 数据库(基本 5 dtus)。如果只是为了测试就足够了。
标签: entity-framework azure asp.net-web-api2