[ akioki @ 21.01.2011. 22:29 ] @
Napravio sam programčić koji određen proces ubija nakon nekog intervala i ponovo ga pokreće. To mi je bilo potrebno zbog zakucavanja neke aplikacije na sistemu a zakucavanje se desavalo uvek na 4 sata.

Sada mi je potreban program koji ce ubijati aplikaciju ako je njeno zauzeće memorije veće od recimo 50MB. Kako ovo izvesti? Kako da dodjem do informacije koliko je narastao recimo proces "Problematicna_Aplikacija"?

Prva verzija programa izgleda ovako:
Code:

using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace kill_process
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void Form1_Load(object sender, EventArgs e)
        {

            
            
            opet:
            Process[] procs = Process.GetProcessesByName("Problematicna_Aplikacija");

            foreach (Process proc in procs)
                proc.Kill();
            Thread.Sleep(5000);
            Process process = Process.Start("Problematicna_Aplikacija.exe");
            Thread.Sleep(10800000);

            goto opet;
            


        }
    }
}


na osnovu ovoga možete videti da sam potpuni početnik pa bi mi i neko lepše rešenje ovog koda stvarno bilo od velike koristi u učenju.

Hvala svima koji su spremni pomoci.
[ Boris B. @ 23.01.2011. 15:10 ] @
Property koji tebi treba je proc.WorkingSet64, tamo pise koliki je Private Working Set procesa, tj. kolicina memorije rezervisane za taj proces. I batali GOTO :)

Code (csharp):


...

private volatile bool Terminated = false;
public const int Limit = 50 * 1024 * 1024;

...

while(!Terminated)
{
  Process[] procs = Process.GetProcessesByName("Problematicna_Aplikacija");

  foreach (var proc in procs)
    if (proc.WorkingSet64 >= Limit)
    {
      proc.Kill();
      Thread.Sleep(5000);
      Process.Start("Problematicna_Aplikacija.exe");    
    }
  Sleep(1000);
}
 
[ akioki @ 30.01.2011. 19:06 ] @
Borise, hvala ti puno na pomoci. To je ono sto mi je trebalo.

Da li postoji neki poseban razlog zasto bi trebalo izbegavati "goto"? Svaki savet dobrodosao.
[ Boris B. @ 31.01.2011. 10:06 ] @
GOTO je dinosaurus iz vremena ne-struktuiranog programiranja, nijedan program od proceduralnih na ovamo ne bi trebao da ga koristi. Uvek postoje struktuirane alternative, sa samo branch i loop konstruktima kao sto su if i for moze da se resi bilo koje izracunavanje ali na struktuirani nacin. Upotreba GOTO-a za izolaciju funkcionalnosti (procedura) je postala obsolete sa pojavom proceduralnih jezika.

Pogledaj npr. vikipediju na temu "goto".
[ mmix @ 31.01.2011. 10:46 ] @
Ne samo da je dinosaurus vec i remeti optimizaciju ILa i native koda koji pomaze bolji branch prediction, sto rezultuje sporjim kodom zbog cestih resetovanja instruction pipeline-a
[ akioki @ 31.01.2011. 11:16 ] @
Sjajno. Obojci se zahvaljujem na pojašnjenju. Ubuduće znam šta mi je činiti.

Hvala.