最近遇到公司的一個項目,需要將多張圖片合併成一個播放的視頻,找了很多資料和嘗試了工具,遇到很多的坑,這裡記下來,希望大家也能順利解決遇到的問題。 合併視頻,主要可以借用OpenCV 和 ffmpeg,這裡是嘗試用ffmpeg.exe的工具去實現圖片文件合併成視頻。 輸入存儲視頻文件的路徑,通過Pro ...
性能調優——EFCore調優
按下硬體、網路不提,我們單表從程式層面對系統的性能進行優化,翻來覆去無外乎三個方面
緩存
非同步
sql
本片文章,我們針對.net core web項目的ef core框架進行性能優化。
1. EF Core框架已經本地緩存機制memorycache,所以我們訪問一個介面,二次訪問的性能相比首次會提升一大截
2.儘可能的通過主鍵查詢
3.在進行字元串模糊查詢時,分為三種情況
//StartsWith,相當於sql語句的like 'A%'
var result= ProductContext.Products.Where(p => p.ProductName.StartsWith("A")).ToList();
//EndsWith,相當於sql語句的like '%A'
var result= ProductContext.Products.Where(p => p.ProductName.EndsWith("A")).ToList();
//Contains,相當於sql語句的like '%A%'
var result= ProductContext.Products.Where(p => p.ProductName.Contains("A")).ToList();
其中的Contains()會導致索引失效,不建議使用
4.指定列查詢。即欄位查詢、傳輸需要時間,欄位越多,所需的時間就越多,所以我們可以指定我們所需的欄位
ProductContext.Products.Select(p =>new { p.ProductId, p.ProductName})
對應的sql為:
select ProductId,ProductName
from Products
5.分頁查詢(常用於客戶端查詢)
int pageIndex = 1;
int pageSize = 10;
var result= ProductContext.Products
.Where(p => p.ProductName.StartsWith("A"))
.Take(pageSize) // 限制結果集數量。
.Skip((pageIndex - 1) * pageSize) // 數據的偏移量
.ToList();
6.一次性查詢數據量較多時(如導出報表),藉助緩衝區處理,即直接ToList()、ToArray()
ps:某些時候使用緩衝區而不是緩存,是因為緩衝區使用時會清空,而緩存不到過期時間不自動清空,某些場景下會浪費記憶體空間
//預設流式處理,遍歷使用result時每次迴圈都會查詢資料庫
var result= ProductContext.Products.Where(p => p.ProductName.StartsWith("A"));
//緩衝區處理(一次性將數據查出,使用result時,直接從隊列中取數據)
var result= ProductContext.Products.Where(p => p.ProductName.StartsWith("A")).ToList();
7.EFCore會對查詢出來的數據進行緩存、跟蹤。跟蹤監控造成額外的空間浪費,但能方便更新數據,所以在不涉及修改的情況下(只查詢時),我們可以用AsNoTracking()方法來手動關閉跟蹤
var result= ProductContext.Products
.Where(p => p.ProductName.StartsWith("A"))
.AsNoTracking()
.ToList();
8.使用非同步 ToListAsync()
—————————以上為單個表數據的efcore優化—————————
原文鏈接:https://blog.csdn.net/YangWeiKe/article/details/130351397
本文來自博客園,作者:.net&new,轉載請註明原文鏈接:https://www.cnblogs.com/wugh8726254/p/17363553.html