- Time taken to complete some operation
- Memory usage of the application
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace StructMemoryUsage
{
struct EmployeeStruct
{
public string Name;
public int EmpId;
}
class Program
{
static void Main(string[] args)
{
long lngGCMemStart = 0;
long lngGCMemEnd = 0;
long lngProcessMemStart = 0;
long lngProcessMemEnd = 0;
//employee as struct
EmployeeStruct[] objEmployee;
int iCount;
iCount = 100000;
Process objProcess = Process.GetCurrentProcess();
//Measure starting point memory
lngGCMemStart = System.GC.GetTotalMemory(true);
lngProcessMemStart = objProcess.PrivateMemorySize64;
objEmployee = new EmployeeStruct[iCount];
//Measure memory after allocating
lngGCMemEnd = System.GC.GetTotalMemory(true);
lngProcessMemEnd = objProcess.PrivateMemorySize64;
for (int i = 0; i < iCount; i++)
{
objEmployee[i].Name = "Emp" + i.ToString();
objEmployee[i].EmpId = i;
}
Console.WriteLine("Struct memory usage.");
//memoryusage difference
Console.WriteLine("GC Memory Use:{0} (bytes)",
lngGCMemEnd - lngGCMemStart);
Console.WriteLine("Process Memory Use:{0} (bytes)",
lngProcessMemEnd - lngProcessMemStart);
Console.WriteLine("GC Memory Start:{0} (bytes)",
lngGCMemStart.ToString());
Console.WriteLine("Process Memory Start:{0} (bytes)",
lngProcessMemStart.ToString());
Console.WriteLine("GC Memory End:{0} (bytes)",
lngGCMemEnd.ToString());
Console.WriteLine("Process Memory End:{0} (bytes)",
lngProcessMemEnd.ToString());
Console.ReadLine();
}
}
}
Output: Struct memory usage. GC Memory Use:802380 (bytes) Process Memory Use:0 (bytes) GC Memory Start:126592 (bytes) Process Memory Start:8937472 (bytes) GC Memory End:928972 (bytes) Process Memory End:8937472 (bytes)
Note: Alternatively use perfmon->Add Counters->.NET CLR Memory counters can be used for viewing the memory consumption of selected .NET process.
Below is the code for measuring the time.using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace MeasuringTime
{
class Program
{
static void Main(string[] args)
{
long lngStartTime = 0;
long lngEndTime = 0;
DateTime dtStartTime;
TimeSpan tsTimeDiff;
long lngSWFrequency=0;
Stopwatch objSW;// Only from .Net 2.0
//If the computer is kept running continuously
//for 49 days then the Environment.TickCount would
//start counting backwards
//So the most significant bit is extracted
lngStartTime = Environment.TickCount
& Int32.MaxValue;
System.Threading.Thread.Sleep(5000);
lngEndTime = Environment.TickCount
& Int32.MaxValue;
Console.WriteLine("TimeElapsed (TickCount):{0}ms",
lngEndTime - lngStartTime);
//Resolution of DateTime.Now is 10+ milliseconds
dtStartTime = DateTime.Now;
System.Threading.Thread.Sleep(5000);
tsTimeDiff = DateTime.Now - dtStartTime;
Console.WriteLine("TimeElapsed (DateTime):{0}ms",
tsTimeDiff.TotalMilliseconds);
//Stopwatch uses the hardware timer if it
//highresolution timer or else uses the DateTime.Now
//To check the availability of the high
//resolution timer use IsHighResolution property
if (true == Stopwatch.IsHighResolution)
{
Console.WriteLine(
"HighResolutionTimer is present"
);
}
else
{
Console.WriteLine(
"HighResolutionTimer is absent"
);
}
lngSWFrequency = Stopwatch.Frequency;
Console.WriteLine(
"Timer frequency in ticks/second:{0}",
lngSWFrequency);
objSW = Stopwatch.StartNew();
System.Threading.Thread.Sleep(5000);
objSW.Stop();
Console.WriteLine(
"TimeElapsed (Stopwatch float):{0}ms",
objSW.Elapsed.TotalMilliseconds
);
Console.WriteLine(
"TimeElapsed (Stopwatch rounded):{0}ms",
objSW.ElapsedMilliseconds
);
Console.ReadLine();
}
}
}
Output: TimeElapsed (TickCount):4992ms TimeElapsed (DateTime):5002ms HighResolutionTimer is present Timer frequency in ticks/second:14318180 TimeElapsed (Stopwatch float):5000.7317ms TimeElapsed (Stopwatch rounded):5000ms
Note: Profiling tools can be used for the measuring time and memory leak.
No comments:
Post a Comment