前言:
有一次在記憶體快照中發現某個ClassName+<>c的物件,如下圖紅框處:
第一次看到有點不知所以,查了一下,原來是compiler建立用來執行lambda的class物件。
舉個例子,寫了如下圖的程式(用到lambda):
看了IL code,的確compiler在我的Program類別內多建了一個<>c類別(如下圖),
這個類別還包含:
- 1個<>c型別的靜態唯讀field(<>9)
- 1個Func委派的靜態的field(<>9__0_0)
- 1個靜態的建構子
- 1個預設建構子
- 1個符合Func委派簽章的方法(b__0_0)
所以managed記憶體內才會出現Progarm+<>c的物件,但compiler為何需要這麼做?
To be continued...
參考資料:
https://blog.jetbrains.com/dotnet/2019/01/23/c-classes-memory-snapshots/