我有一个包含多个相关表的域类Case
public class Case
{
public int CaseId { get; set; }
public string Name { get; set; }
public DateTime StartDateTime { get; set; }
public DateTime? EndDateTime { get; set; }
public virtual ICollection<CaseUser> CaseUsers { get; set; }
public virtual ICollection<Sector> Sectors { get; set; }
public virtual ICollection<CasePoaSerie> CasePoaSeries { get; set; }
public virtual ICollection<Pod> Pods { get; set; }
public virtual ICollection<Poa> Poas { get; set; }
public Case()
{
CaseUsers = new Collection<CaseUser>();
Sectors = new Collection<Sector>();
CasePoaSeries = new Collection<CasePoaSerie>();
Pods = new Collection<Pod>();
Poas = new Collection<Poa>();
}
}
考虑该表有3行数据,我的存储库方法返回所有这3行,并带有所有其他相关表(CaseUsers,Sectors,CasePoaSeries,Pods,Poas)的值。我在服务客户端类中将此域模型转换为视图模型。
我的翻译代码
public static class CaseTranslator
{
public static Case UpdateToDomain(Models.Case modalcase)
{
var domaincase = new Case()
{
CaseId = modalcase.CaseId,
EndDateTime = modalcase.EndDateTime,
Name = modalcase.Name,
StartDateTime = modalcase.StartDateTime,
};
modalcase.CaseUsers.ForEach(x => domaincase.CaseUsers.Add(CaseUserTranslator.UpdateToDomain(x)));
modalcase.CasePoaSeries.ForEach(x => domaincase.CasePoaSeries.Add(CasePoaSeriesTranslator.UpdateToDomain(x)));
modalcase.Sectors.ForEach(x => domaincase.Sectors.Add(SectorTranslator.UpdateToDomain(x)));
modalcase.Poas.ForEach(x => domaincase.Poas.Add(PoasTranslator.UpdateToDomain(x)));
return domaincase;
}
public static Models.Case UpdateToModel(Case domaincase)
{
if (domaincase == null)
{
return null;
}
var modalcase = new Models.Case()
{
CaseId = domaincase.CaseId,
EndDateTime = domaincase.EndDateTime,
Name = domaincase.Name,
StartDateTime = domaincase.StartDateTime,
};
domaincase.CaseUsers.ForEach(x=> modalcase.CaseUsers.Add(CaseUserTranslator.UpdateToModel(x)));
domaincase.Poas.ForEach(x => modalcase.Poas.Add(PoasTranslator.UpdateToModel(x)));
domaincase.Pods.ForEach(x => modalcase.Pods.Add(PodsTranslator.UpdateToModel(x)));
domaincase.CasePoaSeries.ForEach(x => modalcase.CasePoaSeries.Add(CasePoaSeriesTranslator.UpdateToModel(x)));
domaincase.Sectors.ForEach(x => modalcase.Sectors.Add(SectorTranslator.UpdateToModel(x)));
return modalcase;
}
}
每个翻译器遵循相同的模式。
我的ServiceClient代码
public List<Case> GetCasesByUserId(int userId)
{
var activeCases = new List<Case>();
var cases = _caseRepository.GetActiveCasesForUser(userId);
cases.ForEach(o=> activeCases.Add(CaseTranslator.UpdateToModel(o)));
return activeCases;
}
我的问题 当我使用LocalDb作为数据源时,我的方法非常快,请参见以下屏幕截图。
localdb中的数据大约需要124毫秒检索数据。 localdb data retrieval
我的系统大约需要392毫秒翻译这些数据。 localdb data translation
现在,如果我将数据源更改为azure db,则大约需要花费时间。 1,069毫秒从数据库检索数据。
我的系统大约需要2,62,604毫秒转换从azuredb检索到的这些数据。 azuredb data translation
我们可以清楚地看到,转换器处理相同数量的数据需要花费更多的时间(几乎无法接受的延迟),如果从localdb进行转换,则转换速度非常快。
我现在很困惑,因为我不知道真正的问题是什么。
我的翻译器代码有问题吗?还是造成延迟的原因是azure数据库?
附加信息我在Manuel迁移中使用的是实体框架代码优先方法。我使用的azure数据库是免费计划。
天青计划 我们正在使用共享平面,网站在免费计划的azure服务器中运行,而应用程序数据库在标准计划的azure服务器中运行。
答案 0 :(得分:0)
我已经解决了这个问题,代码没有问题,所有问题都归因于网站的托管。
正如我提到的,当我们以Azure免费计划托管站点时,与localhost相比,该站点非常慢。当我们升级托管站点的计划时,该站点变得很快。
结论:如果将Web客户端托管在Azure免费计划中,则会导致性能下降。将天蓝色的计划升级到更高版本将帮助您实现网站的真实速度。