我有一个执行以下代码的方法:
var subresulta1 = (from s in surveys
select new SurveyViewModel()
{
Id = s.Id,
Name = s.Name.Translation(Language.En),
IsActive = s.IsActive,
Locations = (from l in resulta.Select(a => a.Question.Location).Distinct()
select new LocationViewModel()
{
Id = l.Id,
Name = l.Name.Translation(Language.En),
Questions = (from q in resulta.Select(a => a.Question).Distinct()
where q.LocationId == l.Id
select new QuestionViewModel()
{
Text = q.QuestionText.Translation(Language.En),
Scores = (from a in resulta
where a.QuestionId == q.Id
select new ScoreViewModel()
{
Value = (int) a.Value,
PositionId = a.SurveyAnswers.PositionId,
Date = a.SurveyAnswers.CreatedDate,
Location = new LatLonViewModel()
{
Latitude = a.SurveyAnswers.Latitude,
Longitude = a.SurveyAnswers.Longitude
}
}).ToList()
}).ToList()
}).ToList()
}).ToList();
当我在我的测试计算机(带有SQL Server 2012的Windows Server 2008 R2)上运行它时,需要大约3秒才能完成。当我将其作为连接到Azure SQL DB的应用服务运行时,它在约4分钟后完成。应用服务器定价层是"标准:1大"和DB服务器" S2",所以我猜这些机器的性能不是问题。当然,两个数据库中的数据是相同的。有没有人遇到类似的问题?
修改 我不认为这是SQL服务器问题。我认为这是应用程序问题。我重新编写代码以首先从DB获取所有数据然后应用所有逻辑。这完成得更快(30秒),但仍然无法与我自己的服务器的性能相比。任何想法都受到高度赞赏。
答案 0 :(得分:0)
问题是2倍,但最大的问题是Azure中应用和数据库实例的地理位置。下次在Azure中创建Web应用程序时,请确保Web应用程序和数据库服务器位于同一区域(例如西欧)。要小心,因为Azure默认会尝试放置随机内容(在我的情况下,它是中/西美国/巴西)。