Skip to content

Commit 2778ccc

Browse files
author
ahotko
committed
GarbageCollection Sample update, minor refactoring & code cleanup
1 parent 547054b commit 2778ccc

File tree

4 files changed

+96
-9
lines changed

4 files changed

+96
-9
lines changed

CSharp Code Samples/CodeSamples/Comparing/CompareSample.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private void EqualityComparerAddToList(Dictionary<EqualityComparerSample, string
4141
list.Add(item, item.StringProperty);
4242
Console.WriteLine($"Added Sample {item.ToString()}");
4343
}
44-
catch (ArgumentException e)
44+
catch (ArgumentException)
4545
{
4646
Console.WriteLine($"Sample '{item.ToString()}' already in list; not added");
4747
}

CSharp Code Samples/CodeSamples/MultiThreading/ThreadSample.cs

+8-4
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,16 @@ public class ThreadSample
3535
public void Go()
3636
{
3737
var threadLabor = new ThreadLabor();
38-
var laborInstructions = new LaborInstructions(syncObject);
39-
laborInstructions.SomeParameter = $"Current DateTime is {DateTime.Now.ToString()}";
38+
var laborInstructions = new LaborInstructions(syncObject)
39+
{
40+
SomeParameter = $"Current DateTime is {DateTime.Now.ToString()}"
41+
};
4042

4143
Console.WriteLine("Going into thread...");
42-
var thread = new Thread(threadLabor.DoWork);
43-
thread.Priority = ThreadPriority.Highest;
44+
var thread = new Thread(threadLabor.DoWork)
45+
{
46+
Priority = ThreadPriority.Highest
47+
};
4448
thread.Start(laborInstructions);
4549
syncObject.WaitOne();
4650
Console.WriteLine("done!");

CSharp Code Samples/CodeSamples/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
namespace CodeSamples
1717
{
18-
class Program
18+
static class Program
1919
{
2020
static void Main(string[] args)
2121
{

CSharp Code Samples/CodeSamples/Useful/GarbageCollectionSample.cs

+86-3
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,79 @@
4242

4343
namespace CodeSamples.Useful
4444
{
45-
public class GarbageCollectionSample : SampleExecute
45+
internal class GarbageCollectionInfo
46+
{
47+
public int MaxGeneration { get; private set; }
48+
49+
public int Generation0 { get; private set; }
50+
public int Generation1 { get; private set; }
51+
public int Generation2 { get; private set; }
52+
53+
public long TotalMemory { get; private set; }
54+
55+
public GarbageCollectionInfo()
56+
{
57+
MaxGeneration = GC.MaxGeneration;
58+
59+
Generation0 = GC.CollectionCount(0);
60+
Generation1 = GC.CollectionCount(1);
61+
Generation2 = GC.CollectionCount(2);
62+
63+
TotalMemory = GC.GetTotalMemory(false);
64+
}
65+
66+
public override string ToString()
67+
{
68+
return $"GC Info: MaxGen={MaxGeneration}, Gen0={Generation0}, Gen1={Generation1}, Gen2={Generation2}, Total Memory={TotalMemory}";
69+
}
70+
}
71+
72+
internal class GarbageCollection
4673
{
74+
#pragma warning disable S1481
75+
private void MakeSomeGarbage()
76+
{
77+
Console.WriteLine("Making Garbage...");
78+
for (int i = 0; i < 5000; i++)
79+
{
80+
var version = new Version();
81+
}
82+
}
83+
#pragma warning restore S1481
84+
85+
#pragma warning disable S1215
86+
private void ForceGarbageCollection()
87+
{
88+
var gc = new GarbageCollection();
89+
90+
var gcBefore = new GarbageCollectionInfo();
91+
Console.WriteLine($"Before Garbage Collection: {gcBefore}");
92+
gc.MakeSomeGarbage();
93+
var gcAfterGeneratingGarbage = new GarbageCollectionInfo();
94+
Console.WriteLine($"After Generating Garbage: {gcAfterGeneratingGarbage}");
95+
96+
GC.Collect(0);
97+
var gcAfterCleanupGen0 = new GarbageCollectionInfo();
98+
Console.WriteLine($"After Garbage Collection of Gen0: {gcAfterCleanupGen0}");
99+
100+
GC.Collect(1);
101+
var gcAfterCleanupGen1 = new GarbageCollectionInfo();
102+
Console.WriteLine($"After Garbage Collection of Gen1: {gcAfterCleanupGen1}");
103+
104+
GC.WaitForPendingFinalizers();
105+
GC.Collect(2);
106+
107+
var gcAfterCleanupGen2 = new GarbageCollectionInfo();
108+
Console.WriteLine($"After Garbage Collection of Gen2: {gcAfterCleanupGen2}");
109+
110+
GC.WaitForPendingFinalizers();
111+
GC.Collect();
112+
113+
var gcAfterCleanup = new GarbageCollectionInfo();
114+
Console.WriteLine($"After Garbage Collection: {gcAfterCleanup}");
115+
}
116+
#pragma warning restore S1215
117+
47118
private void TurnGarbageCollectionOff()
48119
{
49120
Console.Write("Turning Garbage Collection into low latency (= off)...");
@@ -58,13 +129,25 @@ private void TurnGarbageCollectionOn()
58129
Console.WriteLine("done!");
59130
}
60131

61-
public override void Execute()
132+
public void Go()
62133
{
63-
Title("GarbageCollectionSample");
64134
TurnGarbageCollectionOff();
65135
Thread.Sleep(1000);
66136
TurnGarbageCollectionOn();
67137

138+
ForceGarbageCollection();
139+
}
140+
}
141+
142+
public class GarbageCollectionSample : SampleExecute
143+
{
144+
public override void Execute()
145+
{
146+
Title("GarbageCollectionSample");
147+
148+
var garbageCollection = new GarbageCollection();
149+
garbageCollection.Go();
150+
68151
Finish();
69152
}
70153
}

0 commit comments

Comments
 (0)