efcore性能調優

来源:https://www.cnblogs.com/wugh8726254/archive/2023/04/29/17363553.html
-Advertisement-
Play Games

最近遇到公司的一個項目,需要將多張圖片合併成一個播放的視頻,找了很多資料和嘗試了工具,遇到很多的坑,這裡記下來,希望大家也能順利解決遇到的問題。 合併視頻,主要可以借用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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • B/S結構系統的會話機制(session) 每博一文案 你跑得快,22歲有個家,身邊全是贊嘆,你跑得慢,30歲還在路上追求夢想。有的人為了車,房拼了一輩子, 有的人買輛摩托車走遍了大好江山。你想成為怎樣的人,過怎樣的生活,只要你不後悔就行。 並不是所有人都能在早上七點鐘起床的,也別拿一碗飯來衡量一個 ...
  • 本文首發於公眾號:Hunter後端 原文鏈接:Django筆記三十三之緩存操作 這一節介紹一下如何在 Django 中使用 redis 做緩存操作。 在 Django 中可以有很多種方式做緩存,比如資料庫,比如伺服器文件,或者記憶體,這裡介紹用的比較多的使用 redis 作為緩存。 這篇筆記主要內容如 ...
  • 大部分程式員走入編程世界第一個學習的語言就是C語言。 作為一門古老的編程語言,c語言擁有48年的發展歷程。 為什麼要學習 C語言? C語言是學習電腦程式設計語言的入門語言。最全面的編程面試網站 C語言是一門偏底層的語言,學好它,可以讓你更好的瞭解電腦。 學會了C語言,你就能學習現在任何的高級編程 ...
  • 在前幾篇文章中`LyShark`通過多種方式實現了驅動程式與應用層之間的通信,這其中就包括了通過運用`SystemBuf`緩衝區通信,運用`ReadFile`讀寫通信,運用`PIPE`管道通信,以及運用`ASYNC`反向通信,這些通信方式在應對`一收一發`模式的時候效率極高,但往往我們需要實現一次性... ...
  • P6818 [PA2013]Działka 前言 我太菜了。。。。 對著 jiangly 大佬的題解研究了一下午研究了一下午才搞出來(淚目。 作為一個蒟蒻,我就詳細的講一下我對與本題的理解。 題意 本題的的題意描述的還是比較明瞭。 在二維坐標系中,輸入 $n$ 個點 $m$ 次詢問, 每次詢問,給出 ...
  • 測試環境 Python 3.6.2 代碼實現 非多線程場景下使用 新建並保存EXCEL import win32com.client from win32api import RGB def save_something_to_excel(result_file_path): excel_app = ...
  • 以前寫的C++基本都是C with STL,大多是面向過程的演算法題,或者比較小的項目,然後經常報各種編譯錯誤(對編譯原理不熟),經常把人搞到崩潰,搞不懂構建、鏈接之類的東西。 現在開始記錄一下XMake的學習筆記,記錄一些學習過程中踩的坑,在這篇文章,你將學習到Windows下利用MSYS2進行Mi ...
  • 在.NET Core部署到linux(CentOS)最全解決方案,常規篇一文,我們詳細講解了傳統的.NET Core部署到Linux伺服器的方法,學到了Linux在虛擬機下的安裝、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的發佈與運行全過程。... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...