🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

前言

稍微有經驗的.net工程師一定聽過或使用過Reflection,Reflection雖然好用(能動態處理很多事情)但對於效能會有些影響.

我能否擁有Reflection的動態彈性且兼顧效能呢?

有:就是我們這次要介紹的Expression.

Expression vs Reflection performace

我會準備一個範例來比較ExpressionReflection效能差異

  • Expression
  • Activator.CreateInstance

Activator.CreateInstance Code

Activator.CreateInstance沒甚麼好說就是一個靜態方法傳入Type動態產生一個物件

Expression code

Read more »

前言:

docker透過指令能快速建立相同執行環境並比起VM減少電腦資源消耗.

依照上面優點這就是為什麼docker可以在短時間內快速串紅.

上圖來源《Docker —— 從入門到實踐­》正體中文版

我在網路上找到很棒一個Docker操作流程圖,概括Docker操作時會用到的指令和動作關係.

因為外面有很多blog有對於Docker指令介紹本篇不著重在介紹指令,想要跟大家分享Docker其他細節.

關於Window中的Docker

如果我們需要在Prod運行一個系統可能需要許多不同的程式架構和語言才能完成(甚至有OS限制),在傳統我們選擇使用VM來幫建立不同環境來承載不同程式架構,但VM會模擬OS導致非常肥大,安裝使用資源較大,而Container的Image可以依照我們需求來客製我們需要核心並且Container可以宿主核心達到效能較佳的利用

在Window10 我們可以利用HyperV來跑Docker,原因是HyperV類似一個虛擬機幫我們模擬Linux並且運行Docker Daemon來控管docker container.

Docker需要在Linux中執行,Docker Daemon幫助Client透過命令來操作Docker,如果沒有Docker Daemon我們就無法執行Docker搂.

Read more »

前言

如果我們在Local或測試環境需要建立一個連接MSSQL環境,傳統需要安裝MSSQL和SSMS

但現在有一個更快速輕便方法,就是使用Docker建立MSSQL環境 + VSCode Extension充當SSMS.

安裝時間不僅更快且需要花的空間更小,且可以在Linux使用

Docker建立MSSQL

相信大家都有聽過Docker因為這篇是介紹如何運用Docker建立SSMS,這裡就不介紹太多Docker相關指令意思,有興趣可以自行google.

Window 10才支援docker,因為docker daemon需要在Linux上運作,window需要透過Hyper-V來虛擬化Linux.

如果你是使用Window我推薦下在Docker Desktop,使用UI呈現目前Container有的一些資訊.

如果下載並安裝完Docker可透過docker info命令可以查看,目前Docker使用資訊

Read more »

前文

隨著業務量增長,資料庫的複雜程度也會成正比增長

這裡跟大家分享一個好用壓測資料庫工具SqlQueryStress

在Dev可以模擬高併發時產生的問題,下面會分享我之前Prod遇到問題並解決問題過程

詳細資訊可以看SQLServer-Merge-condition-problem

SQLQueryStress介紹

在執行效能調教和測試高併發產生問題時,我們會關注幾個特別資訊

  1. CPU執行時間
  2. logical read數值
  3. Total執行時間

在此工具都有相對應的資訊提供給我們觀看

Read more »

前文

隨著業務量增長,資料庫的複雜程度也會成正比增長

這裡跟大家分享一個好用壓測資料庫工具SqlQueryStress

在Dev可以模擬高併發時產生的問題,下面會分享我之前Prod遇到問題並解決問題過程

詳細資訊可以看SQLServer-Merge-condition-problem

SQLQueryStress介紹

在執行效能調教和測試高併發產生問題時,我們會關注幾個特別資訊

  1. CPU執行時間
  2. logical read數值
  3. Total執行時間

在此工具都有相對應的資訊提供給我們觀看

Read more »

前言:

在系統中多少會遇到某些交易間需要互斥(不然容易造成DeadLock).

在我們當前系統中有許多動作間需要互斥,不然會有DeadLock問題

藉由已經分析DeadLock Report後,我開始構思如何讓建立Lock可以變得更容易且好理解.

所以就建構出此Lock架構.

如何在此框架使用Lock機制

我們只需要做幾個步驟:

  1. 在使用Lock類別上掛LockerInterceptor攔截器標籤.
  2. 使用Lock方法上使用LockAttribute標籤[Lock(LockKey = "Your lock Key")](Key屬性是必填的)
  3. 設定Lock屬性.

目前寫法是針對單一Server Mutiple Thread來建立互斥Lock. 假如有遇到多台Servers需要建立互斥模式可以,參考Redis的Redlock.Net.

使用方法如下,這樣在多執行緒系統中MethodA1MethodB_A就不會有同時執行問題,這樣就可以造成這兩個動作互斥.

Read more »

前言:

在系統中多少會遇到某些交易間需要互斥(不然容易造成DeadLock).

在我們當前系統中有許多動作間需要互斥,不然會有DeadLock問題

藉由已經分析DeadLock Report後,我開始構思如何讓建立Lock可以變得更容易且好理解.

所以就建構出此Lock架構.

如何在此框架使用Lock機制

我們只需要做幾個步驟:

  1. 在使用Lock類別上掛LockerInterceptor攔截器標籤.
  2. 使用Lock方法上使用LockAttribute標籤[Lock(LockKey = "Your lock Key")](Key屬性是必填的)
  3. 設定Lock屬性.

目前寫法是針對單一Server Mutiple Thread來建立互斥Lock. 假如有遇到多台Servers需要建立互斥模式可以,參考Redis的Redlock.Net.

使用方法如下,這樣在多執行緒系統中MethodA1MethodB_A就不會有同時執行問題,這樣就可以造成這兩個動作互斥.

Read more »

前文:

寫.Net 寫一陣子了 突然覺得一些基本功好重要

之前都沒發現原來.Net 有三種區塊的記憶體空間

這三個區域都有他們各自的含義….

                </div>

.Net 有三種區塊的記憶體空間

Globle:

  1. 全域記憶體
  2. 主要存放全域變數或宣告為static的靜態變數

Heap :

  1. 存放參考類型(可動態產生的空間)
  2. 運行期間分配記憶體位置(這就是為什麼參考類型的類別要new)
  3. 基本是Class關鍵字
Read more »

Agenda

前文

之前有跟大家介紹資料庫交易中的ACID,今天我們就來談談常常聽到Lock

在討論Lock前我們必須先了解,為什麼會有Lock?

假如你的系統能保證只有一個使用著操作每個資源,其實也就不用lock存在,但現實生活中往往有個命令對於同一個資源操作.這時候我們為了確保資料正確性,必須使用lock來避免Racing Condition.

在早期系統我們要儲存資料會存放檔案在Disk並使用類似Excel方式來儲存,但這會導致每次讀取只有有一個使用者(因為對於檔案上Lock),被lock資源其他人就無法存入

兩種圍度的Lock

Sql-Server Lock有分兩種圍度

  1. Lock範圍
  2. Lock類型
Read more »

Agenda

前文

之前有跟大家介紹資料庫交易中的ACID,今天我們就來談談常常聽到Lock

在討論Lock前我們必須先了解,為什麼會有Lock?

假如你的系統能保證只有一個使用著操作每個資源,其實也就不用lock存在,但現實生活中往往有個命令對於同一個資源操作.這時候我們為了確保資料正確性,必須使用lock來避免Racing Condition.

在早期系統我們要儲存資料會存放檔案在Disk並使用類似Excel方式來儲存,但這會導致每次讀取只有有一個使用者(因為對於檔案上Lock),被lock資源其他人就無法存入

兩種圍度的Lock

Sql-Server Lock有分兩種圍度

  1. Lock範圍
  2. Lock類型
Read more »