Witam
Pisze mały programik do wyłączania komputera po określonym czasie i nie chcąc korzystać z DateTime napisałem odliczanie czasu po swojemu. Mam jednak jeden problem, mianowicie nie mam pomysłu jak się pozbyć nadmiarowego tworzenia stringów. Z tego co zauważyłem GC uruchamia się co około 1.5 sec, za każdym razem uwalnia 0.2 MB pamięci.
class Time
{
private byte days;
private ushort hours;
private uint minutes;
private byte seconds;
public Time()
{
days = 0;
hours = 0;
minutes = 0;
seconds = 0;
}
public void AddMinutes(uint min)
{
minutes += min;
ConvertTime();
}
private void ConvertTime()
{
while (minutes > 59)
{
minutes -= 60;
hours += 1;
}
while (hours > 23)
{
hours -= 24;
days += 1;
}
if (days > 99)
{
days = 99;
hours = 23;
minutes = 59;
seconds = 59;
}
}
public void SubSecond()
{
if (seconds > 0)
{
seconds -= 1;
}
else
{
CarryMinute();
}
}
private void CarryMinute()
{
if (minutes > 0)
{
minutes -= 1;
seconds = 58;
}
else
{
CarryHour();
}
}
private void CarryHour()
{
if (hours > 0)
{
hours -= 1;
minutes = 59;
seconds = 58;
}
else
{
CarryDay();
}
}
private void CarryDay()
{
if (days > 0)
{
days -= 1;
hours = 23;
minutes = 59;
seconds = 58;
}
}
public override string ToString()
{
string sDays = ChangeToString(days),
sHours = ChangeToString(hours),
sMinutes = ChangeToString(minutes),
sSeconds = ChangeToString(seconds);
return string.Format("{1}{0}{2}{0}{3}{0}{4}", ":", sDays, sHours, sMinutes, sSeconds);
}
private string ChangeToString(uint number)
{
if (number < 10)
{
return string.Format("{0}{1}", "0", number);
}
else
{
return string.Format("{0}", number);
}
}
}