Posts
Check app pool recycle with event log
IIS Website 預設 29 小時回進行一次回收,所有 Session 連帶會被斷線。
若要偵測是否是因為該機制導致使用者斷線,我們可以從 Event Log 下去觀察,只要查閱 Windows Logs\System 內是否有 Source 為 WAS 且 Level 為 Information 的 Event 就可以了。
{% img /images/posts/CheckAppPoolRecycle/1.png %}
read morePosts
.NET Portability Analyzer Extension
.NET Portability Analyzer Extension 是微軟出的 Visual Studio 擴充套件,能偵測程式是否具備 Portability,並針對不具 Portability 的地方提供對應的修改建議,讓開發人員在做跨平臺的開發上更加的便利。
{% img /images/posts/PortabilityAnalyzerExtension/1.png %}
Channel9 這邊有相關的介紹影片,建議可以稍微瀏覽一下,可以幫助我們快速上手。
使用前記得先將擴充套件裝上。
裝好後需先至 Options 這邊設定所要分析的平臺。
{% img /images/posts/PortabilityAnalyzerExtension/2.png %}
在使用上,該擴充套件有兩種不同的使用方式。一種是對選取的組件進行分析,透過 [Analyze/Analyze Assembly Portability…] 主選單選項去觸發。
{% img /images/posts/PortabilityAnalyzerExtension/3.png %}
{% img /images/posts/PortabilityAnalyzerExtension/4.png %}
產生的報表能顯示出程式在各平台的支援程度,及細部的支援比較。
{% img /images/posts/PortabilityAnalyzerExtension/5.png %}
另一種則是對選取的專案進行分析,透過方案總管的滑鼠右鍵選單選項觸發。
{% img /images/posts/PortabilityAnalyzerExtension/6.png %}
一樣會產生類似的報表,但是因為透過專案的方式觸發有程式原碼,所以報表還會進一步的給予我們對應的修改建議,Error List 工具視窗這邊也會顯示出對應的訊息。
{% img /images/posts/PortabilityAnalyzerExtension/7.png %}
Link .NET Portability Analyzer extension Leveraging existing code across .NET platforms - .NET Blog - Site Home - MSDN Blogs
read morePosts
Web cache
Web Cache 是 ASP.NET 內建的 Cache 機制,這邊簡單的隨手紀錄一下。
Cache 物件的可從 HttpContext 取得。
var httpContext = HttpContext.Current ; var cache = httpContext.Cache ; Cache 物件取得後,我們可以透過 Add 或 Insert 將要快取的資料存入。這邊在帶入資料的同時,我們可以透過參數決定資料的存活週期,以及快取被清除時所要運行的 Callback。
cache.Add (key, value, null , DateTime.Now.AddMilliseconds(cacheInterval), TimeSpan.Zero, CacheItemPriority.Normal, null); 取出時也只要帶入 Key 值即可。
if (cache[key] != null ) value = cache[key]; Link Cache 類別 (System.Web.Caching) TIPS-ASP.NET Cache Mini Guide - 黑暗執行緒
read morePosts
Roslyn - Introduce diagnostic analyzer
Diagnostic Analyzer 功能是用來診斷分析程式碼的,開發人員可自行撰寫 Diagnostic Analyzer 去擴充 Roslyn 的編譯器,實作自己的程式碼診斷邏輯。
他有兩種不同的使用方式,一種是包裝成 VSIX 檔,需要安裝使用。安裝後 Diagnostic Analyzer 的診斷會針對 Visual Studio 開啟的所有專案,就好像是內建的診斷一般。
另一種則是建置成一般的 Dll 檔,需要依需求在個別專案中引用使用。使用上需搭配 Visual Studio 14 以後的版本,在方案總管中找到 Analyzers 節點,按右鍵加入 Analyzer。或是直接透過 NuGet 加入引用也可以。
最後這邊可以看一下 Channel9 的介紹,這段影片會介紹他自己寫的 Diagnostic Analyzer是如何對 C# 6.0 的 Feature 做出診斷與建議,並帶到一些實作上的細節,看完相信對於 Diagnostic Analyzer 會更加的了解。
read morePosts
Clr C# Heap Allocation Analyzer
Clr C# Heap Allocation Analyzer 是 Diagnostic Analyzers 的套件,功能上有點類似 ReSharper - Heap Allocation Viewer Extension,能對 Heap 的操作部分做些 Highlight。
這邊可先參閱一下影片的介紹:
該套件提供兩種安裝方式,一種是選擇安裝 VSIX,用 Extension Manager 搜尋安裝或是自 NuGet Gallery | Clr C# Heap Allocation Analyzer 1.0.0.5 下載安裝,好處是可以將效果套用至所有專案。
{% img /images/posts/HeapAllocationAnalyzer/1.png %}
一種則是用 NuGet By 專案安裝,好處是可以只套用至特定的專案。
{% img /images/posts/HeapAllocationAnalyzer/2.png %}
安裝完後,在程式編輯時即會呈現進行對應的分析,像是筆者這邊的程式即被偵測出有 Boxing 的動作。
{% img /images/posts/HeapAllocationAnalyzer/3.png %}
Link NuGet Gallery | Clr C# Heap Allocation Analyzer 1.0.0.5 Clr Heap Allocation Analyzer extension
read morePosts
Microsoft.CodeAnalysis.CSharp.FxCopAnalyzers
Microsoft.CodeAnalysis.CSharp.FxCopAnalyzers 是一個 Diagnostic Analyzer 套件,是 FxCop 部分檢查規則的 Analyzer 實作。
{% img /images/posts/FxCopAnalyzers/1.png %}
因為目前仍是 Preview 版本,所以這邊在使用時需先叫出 Package Manager Console,然後叫用命令安裝:
Install-Package Microsoft.CodeAnalysis.CSharp.FxCopAnalyzers -Pre {% img /images/posts/FxCopAnalyzers/2.png %}
安裝完後,我們可以看到方案總管的 Analyzers 節點下多了兩個 Analyzer。
{% img /images/posts/FxCopAnalyzers/3.png %}
展開節點可以看到該 Analyzer 所 Support 的分析。
{% img /images/posts/FxCopAnalyzers/4.png %}
回到程式編輯這邊,可以看到當我們程式撰寫不符合 Analyzer 的規定時,編譯器就會提出對應的警告,像這邊就告知我們要實作 IDisposible 介面,也提供了對應的修正。
{% img /images/posts/FxCopAnalyzers/5.png %}
read morePosts
C# 6.0 - Expression bodied members
Expression bodied members 是預計要在 C# 6.0 釋出的新功能,目前已可在 Visual Studio 14 中透過設定將功能開啟進行體驗,只要在方案檔中加上:
<LangVersion>experimental</LangVersion> 當撰寫簡單的成員方法或是屬性時,Expression bodied members 能讓我們將程式碼精簡。
在使用上就只要將屬性或方法的宣告後面直接接上 Lambda 表示式即可。
像是成員屬性的處理會像下面這樣,少了本來大括弧的區塊,也少了 Get 區塊。
... public string ID => Guid.NewGuid().ToString(); ... 如果是成員方法處理上也類似,只是本來大括弧區塊內的內容用 Lambda 取代。
... public override string ToString() => this.Name; ... 這邊可以看到用這樣的寫法可能會造成很難區別是屬性還是方法,使用上要特別注意小心,基本上差異只在於後面有沒有接小括弧區塊及方法的參數。
最後看個完整的範例:
using System; public class Program(string name) { public string ID => Guid.NewGuid().ToString(); public string Name { get; private set ; } = name; public override string ToString() => this.
read morePosts
Roslyn Syntax Visualizers
在使用 Roslyn 做開發時,常免不了會要去處理語法的解析,這時我們會需要輔助工具將語法解析轉換為語法樹,以視覺的方式呈現,讓 Roslyn 的開發上更為便利。
所以開發前我們要到 .NET Compiler Platform Syntax Visualizer extension 這邊下載 Roslyn Syntax Visualizer。
{% img /images/posts/RoslynSyntaxVisualizer/1.png %}
下載完後進行安裝。
{% img /images/posts/RoslynSyntaxVisualizer/2.png %}
{% img /images/posts/RoslynSyntaxVisualizer/3.png %}
安裝完我們可以透過 Visual Studio 的主選單選項(View\Other Windows\Roslyn Syntax Visualizer)將 Roslyn Syntax Visualizer Tool Window 叫出。
{% img /images/posts/RoslynSyntaxVisualizer/4.png %}
叫出後 Roslyn Syntax Visualizer 後,它會偵測目前所編輯的程式碼,將之解析成語法樹。且會偵測編輯區的選取,反映在語法樹上。
{% img /images/posts/RoslynSyntaxVisualizer/5.png %}
反之亦然。
{% img /images/posts/RoslynSyntaxVisualizer/6.png %}
語法樹上的節點有做顏色的區分,可以透過上方的 Legend 按鈕查閱各顏色所代表的意義。
{% img /images/posts/RoslynSyntaxVisualizer/7.png %}
語法樹上節點的滑鼠右鍵快顯選單也有提供一些功能,像是可以用更直覺的圖形方式呈現。
{% img /images/posts/RoslynSyntaxVisualizer/8.
read morePosts
Vagrant - SSH in windows
要在 Windows 下使用 SSH 連進 Vagrant 作些設定,我們有幾種方式可以使用。
一種是透過 SSH 連線軟體連進 Vagrant,像是 PuTTY。
輸入 IP 與 Port 進行連線。
{% img /images/posts/VagrantSSHInWindow/1.png %}
連進去後輸入 Vagrant Box 的帳密即可,如果不知道帳密的話,通常這邊的帳密會是 vagrant,可以試試看。
{% img /images/posts/VagrantSSHInWindow/2.png %}
另外一種方式則是直接透過命令提示字元叫用 Vagrant SSH 連進 Vagrant。使用前需先安裝 Git,並將 Bin 的路徑設上,都完成後即可直接叫用Vagrant SSH 連進 Vagrant。
{% img /images/posts/VagrantSSHInWindow/3.png %}
路徑的設定可以直接在系統的環境變數中設定,叫用上會比較方便。但若有需要也可以直接在命令提示字元中加入。
set PATH=%PATH%;C:\Program Files (x86)\Gitin 此外也可以直接叫用 SSH 連進去,比較麻煩一點就是了。
{% img /images/posts/VagrantSSHInWindow/4.png %}
read morePosts
ASP.NET - Disable View State
禁用 View State 有幾種方式。若要將所有頁面都禁用,我們可以在 Web.Config 內的 system.web 加入 pages 的 element,並將其 enableViewState attribute 設為 false。
... <system.web> ... <pages enableViewState= "false"/> ... </system.web> ... 若要在單一頁面禁用,可以在該檔案最前面加入…
<%@ Page EnableViewState= "true" ViewStateMode= "Disabled" .. . %> ... 若要指定單一控制項禁用,可直接為控制項加上 EnableViewState attribute,並將其值設為 false…
... <asp:GridView ID= "gdvCustomers" runat= "server" DataSourceID= "mySqlDataSource" AllowPaging="True" EnableViewState ="false"/> ... 若要針對單一控制項啟用,頁面上其餘的控制項禁用,可以像下面這樣處理…
<%@ Page EnableViewState= "true" ViewStateMode= "Disabled" .. . %> ... <asp:GridView ID= "gdvCustomers" runat= "server" DataSourceID= "mySqlDataSource" AllowPaging="True" ViewStateMode= "Enabled"/> .
read more