Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

c# - kako ubiti prosec koji je dostigao neko određeno zauzeće memorije

  • 5 odgovora
  • 1.819 pregleda

Najnovija ↓

c# - kako ubiti prosec koji je dostigao neko određeno zauzeće memorije 21.01.2011. u 23:29 · pre 192 meseca #1
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.
Re: c# - kako ubiti prosec koji je dostigao neko određeno zauzeće memorije 23.01.2011. u 16:10 · pre 192 meseca #2
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);
}
 
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Sviđa mi se1
Re: c# - kako ubiti prosec koji je dostigao neko određeno zauzeće memorije 31.01.2011. u 11:06 · pre 191 mesec #4
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".
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Re: c# - kako ubiti prosec koji je dostigao neko određeno zauzeće memorije 31.01.2011. u 11:46 · pre 191 mesec #5
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
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme