EF 延時載入與死鎖

来源:https://www.cnblogs.com/hao-1234-1234/archive/2018/06/04/9131496.html
-Advertisement-
Play Games

第一種 第二種 怎麼看生成的sql語句的? 1)資料庫里 致博客園 1)傻逼的150字數限制! 2)範圍竟然不包括代碼! 3)添加成功修改失敗,似乎對修改很有意見! 致博客園 1)傻逼的150字數限制! 2)範圍竟然不包括代碼! 3)添加成功修改失敗,似乎對修改很有意見! 致博客園 1)傻逼的150 ...


 

 

第一種

            #region 第一種延遲載入 用到的時候就會去查詢數據。
            //用到的時候就會去查詢數據。

            //IQueryable<UserInfo> temp = from u in dbContext.UserInfo 
            //                            //where  u.UName.Contains("o") 
            //                            //&& u.UName.StartsWith("D")
            //                            select u;
            //兩種延遲載入

            //foreach (var userInfo in temp)
            //{
            //    Console.WriteLine(userInfo.ID + "  " +userInfo.UName);
            //}

            //foreach (var userInfo in temp)
            //{
            //    Console.WriteLine(userInfo.ID + "  " + userInfo.UName);
            //}
            //資料庫監視發現:查詢了兩次。
            //因為IQueryable每次用到時都會重新查詢,所以查詢到的數據不可作為緩衝。

            //var temp2 = from u in temp
            //            where u.ID > 0
            //            select u;
            //foreach (var userInfo in temp2)
            //{
            //    Console.WriteLine(userInfo.ID + "  " + userInfo.UName);
            //} 
            //資料庫監視發現 temp和temp2只查詢了一次,linq查詢生成的sql腳本自動合併了。
            #endregion

 

 

第二種

            #region 第二種延遲載入


            //情景1:數據量小的時候
            //foreach (var userInfo in temp)//100個用戶數據。   共交互101,但數據量較少時,跟後臺交互的時間就比 一次連接表查詢時間還要長。
            //{
            //    foreach (var orderInfo in userInfo.OrderInfo)
            //    {
            //        Console.WriteLine(userInfo.UName+ "  " +orderInfo.ID + "  " + orderInfo.Content);
            //    }
            //}

            //情景2:但數據量特別大時。例如: 用戶表跟訂單表數據都是10000 0000條    
            //如果進行連接查詢的時候:過濾數據實際是多少條?顯然一次連接查詢會時資料庫崩潰。
            //這裡使用多次查詢,記憶體重組。 即上面的延遲載入技術簡單的解決了這個問題。

            //問題來了: 
            //1數據量較少時怎麼辦?(一般不會再頁面展示所有數據,而是分頁,數據量不會特別大,那麼必須減少連接資料庫的次數)
            //表連接查詢  Include("OrderInfo")
            //IQueryable<UserInfo> temp = from u in dbContext.UserInfo.Include("OrderInfo")
            //                            //where  u.UName.Contains("o") 
            //                            //&& u.UName.StartsWith("D")
            //                            select u;

            //2多次查詢;併發訪問怎麼辦?
            //理解併發:
            //在操作系統中,併發是指一個時間段中有幾個程式都處於已啟動運行到運行完畢之間,且這幾個程式都是在同一個處理機上運行,但任一個時刻點上只有一個程式在處理機上運行。
            //在關係資料庫中,允許多個用戶同時訪問和更改共用數據的進程。SQL Server 使用鎖定以允許多個用戶同時訪問和更改共用數據而彼此之間不發生衝突。
            //在這裡訪問由於鎖的存在,併發問題轉換成了計算能力問題,計算能力可以通過添加伺服器來講解決。

            //3死鎖問題:
            //理解死鎖
            //死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
            //出現情況 
            // 表連接查詢出現: 進程X占用A表,X想連接B表,必須等B表釋放; 但同時y又占用了B表,y想有連接了A表,在等A表釋放。 結果x、y都在等待,二A、B表同時被占用著。
            // 連接的表越多,死鎖問題越突出。
            //解決方案: 臨時表
            //為什麼能解決?因為此時鎖定的是臨時表,而原始表處於釋放狀態。
            //臨時表有兩種類型:本地表和全局表。在與首次創建或引用表時相同的 SQL Server 實例連接期間,本地臨時表只對於創建者是可見的。當用戶與 SQL Server 實例斷開連接後,將刪除本地臨時表。全局臨時表在創建後對任何用戶和任何連接都是可見的,當引用該表的所有用戶都與 SQL Server 實例斷開連接後,將刪除全局臨時表。
            //詳情可百度臨時表用法
            #endregion

 

怎麼看生成的sql語句的?

1)資料庫里

詳情可百度:  SQL Server Profiler (事件追蹤)

2)斷電調試時
查詢數據後,快速監視如下。查詢數據前是沒有這些內容的。

 



 

 

 致博客園

1)傻逼的150字數限制!

2)範圍竟然不包括代碼!

3)添加成功修改失敗,似乎對修改很有意見!

 致博客園

1)傻逼的150字數限制!

2)範圍竟然不包括代碼!

3)添加成功修改失敗,似乎對修改很有意見!

 致博客園

1)傻逼的150字數限制!

2)範圍竟然不包括代碼!

3)添加成功修改失敗,似乎對修改很有意見!

 

致網友:如有錯誤,望立刻指正。


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

-Advertisement-
Play Games
更多相關文章
  • 1 視圖傳遞多個參數 (1) 普通傳參 : 關鍵字參數傳遞 (2) 字典傳參 : 以字典的形式傳遞 (3) 全局變數g傳遞 視圖中: 模板中 (4) 傳遞全部的本地變數給template,使用 locals() ,直接獲取變數值 test.html中 2 錯誤頁面定製 指定錯誤頁面:只需要一個錯誤模 ...
  • 簡單爬蟲架構 動態運行流程 URL管理器的作用 URL管理器的3種實現方式 網頁下載器的作用 Python網頁下載器的種類 urllib2下載網頁的3種方法 網頁解析器的作用 Python的幾種網頁解析器 結構化解析依賴DOM樹 Beautiful Soup語法 代碼舉例: 1.創建Beautifu ...
  • 圖片修複程式 可用於水印去除 在現實的生活中,我們可能會遇到一些美好的或是珍貴的圖片被雜訊干擾,比如舊照片的摺痕,比如鏡頭上的灰塵或污漬,更或者是某些我們想為我所用但有討厭水印,那麼有沒有一種辦法可以消除這些雜訊呢? 答案是肯定的,依然是被我們用了無數次的OpenCV這款優秀的框架。 效果預覽 圖片 ...
  • 既然是Python程式員找美女,就要用python程式員的方法。 今天我們的目標是,爬社區的美女~而且,我們又要用到新的姿勢(霧)了~scrapy爬蟲框架~ 1scrapy原理 在寫過幾個爬蟲程式之後,我們就知道,利用爬蟲獲取數據大概的步驟:請求網頁,獲取網頁,匹配信息,下載數據,數據清洗,存入數據 ...
  • Java開源生鮮電商平臺-庫存管理設計與架構(源碼可下載) 說明:Java開源生鮮電商平臺-庫存管理設計與架構有以下幾個功能 WMS的功能:1、業務批次管理 該功能提供完善的物料批次信息、批次管理設置、批號編碼規則設置、日常業務處理、報表查詢,以及庫存管理等綜合批次管理功能,使企業進一步完善批次管理 ...
  • 轉載自:https://blog.csdn.net/jky_yihuangxing/article/details/53301834 很簡單,直接上代碼了。 ...
  • .Net Core的其中一種認證與授權模式是基於Cookie的,首先我們先創建一個.Net Core MVC 項目: 然後增加對頁面訪問的許可權控制,對要訪問的頁面Conytroller增加Authorize屬性,同時我們在start.cs中增加cookie許可權驗證的支持配置,這時候再去訪問需要許可權驗 ...
  • 1、基礎許可權版地址:http://www.eipflow.com:9998/Account/Login 2、購買後憑藉相關證明圖片聯繫作者:1039318332 建立git賬戶並告知用戶名及密碼,git地址 3、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...