Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

Lines changed: 1 addition & 1 deletion
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 (ArgumentExceptione)
44+
catch (ArgumentException)
4545
{
4646
Console.WriteLine($"Sample '{item.ToString()}' already in list; not added");
4747
}

‎CSharp Code Samples/CodeSamples/MultiThreading/ThreadSample.cs

Lines changed: 8 additions & 4 deletions
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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

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

‎CSharp Code Samples/CodeSamples/Useful/GarbageCollectionSample.cs

Lines changed: 86 additions & 3 deletions
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 overridevoid 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)

AltStyle によって変換されたページ (->オリジナル) /