優化數據訪問和I/O操做數據庫
數據交互以及遠程服務一般是程序中最慢的部分,高效的讀寫數據對性能尤爲重要。緩存
建議操做:網絡
Where
, .Select
, .Sum
等方法過濾或聚合查詢,從而在數據庫中進行過濾。在高性能EF中提到下面兩個提升性能的方法:app
使用 DbContext 池異步
services.AddDbContextPool<BloggingContext>( options => options.UseSqlServer(connectionString));
使用已編譯的查詢(compiled query)分佈式
// Create an explicitly compiled query private static Func<CustomerContext, int, Customer> _customerById = EF.CompileQuery((CustomerContext db, int id) => db.Customers .Include(c => c.Address) .Single(c => c.Id == id)); // Use the compiled query by invoking it using (var db = new CustomerContext()) { var customer = _customerById(db, 147); }
以上兩種方式要在重複評估,性能測試以後再使用,由於已編譯的查詢在某些狀況下可能並不會帶來性能提高。工具
查詢性能問題能夠經過Application Insights或其餘分析工具,分析數據訪問耗時來發現。大多數數據庫會提供頻繁查詢的統計信息,能夠幫助開發人員進行分析。性能