常見引發的 Memory Leaks 情境-以 .NET 為例

Commonly triggered Memory Leaks situations take .NET as an example

先前的篇章我們簡介了 C# .NET  中的垃圾回收機制,撰寫期間剛好簡訊相關的專案也出現了 Memory Leaks Bug……儘管垃圾回收機制為我們省下許多管理記憶體的心力,然而 GC 並不是萬靈丹,仍有許多程式的撰寫漏洞會造就 Memory Leaks,與時漸進,造成記憶體耗盡之後進而 Crash 整個程式。在今天的篇章中我們將介紹幾個常見 .NET 中造成 Memory Leaks 的原因。

物件資料重覆

將資料篩選重覆也算是一個常見的課題,尤其是記憶體中的資料未必如SQL語法用個distinct就解決;不過在考慮如何篩選記憶體中的資料重覆前,須先了解資料重覆的標準是什麼,意即物件的相等判斷為何。

對此,以下準備了兩種資料類型進行比對:實值型別的int常數、與參考型別的自定義class MediaMsg。

初窺.NET C#中的 垃圾回收機制(二)

初窺.NET C#中的 垃圾回收機制(2)

在上篇我們主要對 C# 的記憶體分區及垃圾回收機制進行簡單的介紹,在這篇中我們將介紹 Mark-Sweep 演算法如何達成清理記憶體的目標。

 

無論任何垃圾回收演算法,皆需包含兩大部分:

  1. 必須能搜尋無相關參考的物件。
  2. 必須要能對占用空間的垃圾物件進行回收的動作。

Mark and Sweep 演算法也不例外,在此演算法中,第一部分稱為 Mark Phase,遍歷所有參考物件並標記哪些仍在使用、哪些沒有;第二部分則稱為 Sweep Phase,清除在上一步驟備標記為未使用的物件,釋放記憶體空間。

FIDO2:Web Authentication 簡介

FIDO2:Web Authentication 簡介

今年三月四號 W3C 正式將 WebAuthn 列入正式標準中,WebAuthn 是 FIDO2 標準中構成核心的一部份,以 Web-based API 的方式讓網站可以將他們的登入頁加入瀏覽器及平台所支援的 FIDO 驗證。一般我們所使用的密碼登入機制屬於單一認證,一旦被盜取密碼便很容易被控制帳號存取權,然而根據 2017 年的統計,只有28%的使用者使用二階段認證(包括簡訊認證、Google Auth…等等)。WebAuthn 提供另一種免密碼、具高安全性驗證方式的選擇。開發者可透過 API 啟動 FIDO2 驗證,透過行動裝置、指紋辨識或是硬體安全金鑰登入帳號而不需要密碼,提供使用者除了密碼登入以外的便利選項。