C# 手動釋放記憶體實驗
C# 手動釋放記憶體實驗
資料來源:
https://docs.microsoft.com/zh-tw/dotnet/api/system.gc.collect?redirectedfrom=MSDN&view=netframework-4.8#overloads
https://blog.csdn.net/lastBeachhead/article/details/3379230
GITHUB: https://github.com/jash-git/CS_Console_Release_STACK
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Console_Release_STACK { //C# 手動釋放記憶體實驗 //https://docs.microsoft.com/zh-tw/dotnet/api/system.gc.collect?redirectedfrom=MSDN&view=netframework-4.8#overloads //https://blog.csdn.net/lastBeachhead/article/details/3379230 class MyGCCollectClass { private const int maxGarbage = 1000; static void pause() { Console.Write("Press any key to continue..."); Console.ReadKey(true); } static void Main(string[] args) { int count = 0; Console.WriteLine("count={0}", count++); Console.WriteLine("Memory used before collection: {0:N0}", GC.GetTotalMemory(false)); // Put some objects in memory. MyGCCollectClass.MakeSomeGarbage(); Console.WriteLine("count={0}", count++); Console.WriteLine("Memory used after collection: {0:N0}", GC.GetTotalMemory(false)); // Collect all generations of memory. GC.Collect(); Console.WriteLine("count={0}", count++); Console.WriteLine("Memory used after full collection: {0:N0}", GC.GetTotalMemory(false)); Console.WriteLine("count={0}", count++); pause(); } static void MakeSomeGarbage() { Version vt; // Create objects and release them to fill up memory with unused objects. for (int i = 0; i < maxGarbage; i++) { vt = new Version(); } } } }
5 thoughts on “C# 手動釋放記憶體實驗”
C#
記憶體
回收
變數
垃圾
JAVA
記憶體
回收
變數
垃圾
———————-
有文章指出在變數確定不使用時,只接設定NULL
另外也可以執行
System.gc(); // 建議回收物件
這一篇實驗可以證明指定NULL 可以以確保JAVA 物件確實執行變數回收
https://openhome.cc/Gossip/JavaGossip-V1/GarbageCollection.htm
//JAVA ONELINE 測試
//https://www.tutorialspoint.com/online_java_compiler.php
//確定 System.gc(); 和 指定NULL 豆JAVA都是參考用
public class GcTest {
private String name;
public GcTest(String name)
{
this.name = name;
System.out.println(name + “Create”);
}
protected void finalize()
{
System.out.println(name + “Delete”);
}
}
public class HelloWorld{
public static void main(String []args){
System.out.println(“Hello World…000”);
GcTest obj1 = new GcTest(“object1…”);
GcTest obj2 = new GcTest(“object2…”);
GcTest obj3 = new GcTest(“object3…”);
System.out.println(“Hello World…001”);
obj1 = null;
obj2 = null;
obj3 = null;
System.out.println(“Hello World…002”);
System.gc();
System.out.println(“Hello World…003”);
}
}
/*
Hello World…000
object1…Create
object2…Create
object3…Create
Hello World…001
Hello World…002
Hello World…003
object1…Delete
object3…Delete
object2…Delete
*/
C#
JAVA
記憶體
回收
變數
垃圾
釋放
手動