我有一系列Azure Websites
部署到与Resource Group
相同的Azure VM running SQL server
,据我所知,这是确保您的流程所需的全部内容位于地理上非常接近的地方。
但是我遇到了一些陡峭的性能问题。在运行像这样的简单代码时使用Entities Framework
var result = await Context.Settings.Where(o => o.Name == name).FirstOrDefaultAsync();
或像
这样简单的事情var result = await context.Categories.Include(o => o.ParentCategory);
或以上的一些组合我的本地开发设置和生产系统之间的平均性能差异是400%。这种差异在不同类型的查询中看起来相当一致,并且在问题上抛出了更大的VM,它肯定似乎不是硬件问题,因为它没有效果。虽然我预计会有一些网络延迟,但这似乎非常高。
我做错了什么?如果有人能够提供Azure网站和Azure VM之间通信的最佳实践细分以及如何改善延迟,我将非常感谢。
旁注:在我的研究过程中,我发现你可以创建Azure Virtual Networks
(并假设这可能是解决方案的一部分)但是我看不到将网站移动或关联到这样的虚拟网络的方法网络
答案 0 :(得分:1)
马克西姆。 我已经多次看过这个评论了。 Microsoft发布了一些在Azure中使用Entity Framework的指南。你可以在这里找到它:
https://msdn.microsoft.com/en-us/library/cc853327(v=vs.110).aspx
这可能不是您问题的最佳答案,但我相信它会对您有所帮助。它确实对我有用。
此外,如果可能的话,我会考虑一种温和的CQRS实现,这样你就可以创建两个上下文对象,一个用于写入,另一个用于读取。在只读上下文中,您可以关闭EF中的跟踪,显着整体提高了EF读取性能。
// In your READ context, do this in the constructor
context.Configuration.AutoDetectChangesEnabled = false;
我希望这有助于此。