Använder mig av Server-Based Timers i min Windows application. Jag använder mig av 8st timers som varje sekund räknar upp en räknare (ska föreställa en tidtagare). Jag tycker programmet jobbar trögt och undrar om man kan använda Threads? Jag vill att varje timer ska arbeta i var sin tråd. Hur gör man det? Har försökt läsa mig till det men det finns inga exempel på just det. Finns det begränsningar? Innan jag går djupare in i dina frågor så är jag nyfiken varför du behöver ha 8 st timers? Räcker det inte med en? Jag har olika tidtagare som sätts igång vid olika tillfällen. Mitt sätt är kanske inte det rätta...är öppen för andra lösningar. När tidtagaren har gått en minut ska en variabel räknas upp. Jag har "en tidtagar" klass som jag räknar upp varje sek. Räknaren som räknas upp varje sekund släpar ibland när mycket annat (tex. kommunication till databas) görs. Förstår lite vad det är du gör, är dock inte helt 100% säker. Kan du skriva ett usecase eller något som förklarar det du vill göra? (inte tekniskt nu utan själva händelseflödet.) Jag ska hålla reda på vad fyra olika "personer" gör för varje minut. När en minut har gått ska tid (variabel värdet som räknas upp med 1 varje min) registreras på olika aktiviteter till db (detta gör den som använder systemet). Jag har försökt lösa detta genom att ha "låtsas" tidtagare som räknas upp varje sek (detta bara för användaren av systemet ska kunna se att snart har det gått en minut och tid ska registreras på aktivitet). Varje minut (som sagt) räknas en variabel upp med 1. Tidtagarna och uppräkning av minut sker vid olika tider för varje person. Beroende på när man sätter igång tidtagaren för respektive. Hej. Testar just nu att köra allt på en timer, dvs räknare för alla 4 personerna räknas upp i samma Timer, och när sekunder har passerat 60 så räknas respektive variabler upp med 1. Är det ett program som skall vara igång? alltså du startar typ en Observer programvara som övervakar? Det är inget program alla 4 skall ha va? Det är ett program som ska vara igång.Ett och samma program ska hålla reda på vad 4 st. personer (som man ska "bevaka") gör varje minut utifrån när de börjar jobba. Jag kör mot en SQL Server db, jag tror att det är alla timers som gör att programmet har känts segt. Programmet körs på bärbara datorer, där prestandarn kanske inte är den bästa. "Segheten" känns inte av något nämnvärt när programmet körs på stationär dator med bättre kapacitet (512 RAM etc, bärbar har bara 256). Försöker nu med en och samma timer, och om tidtagaren släpar gentemot vanlig tid så korrigerar jag nu var 10 sekund, mot datorns klocka. Blev precis klar med alla ändring, ska göra tester nu på bärbar dator och se om segheten är bort... :-) Jag tycker att det fungerar bättre. Har försökt stressa den lilla datorn...verkar funka bra, har testat och testat...Gör nu allt i en timer istället för flera, bara det inte blir overload för den enda timern...det märker jag.System.Timers.Timer
Tacksam för all hjälp
/SaraSv: System.Timers.Timer
För vajre sekund som gått kan du ju utföra de 8 olika sakerna, du behöver inte 8 timers för att trigga 8 events...
//Johan NSv: System.Timers.Timer
Hoppas detta förtydligar något
/SaraSv: System.Timers.Timer
Så kan vi ju se om det finns annan lösning än du gjort eller om man kan snabba upp din lösning så den slipper ta en massa resurser.
//Johan NSv: System.Timers.Timer
Ditt förslag om en och samma timer för sek intervallen är en möjlig lösning...man blir insnöad på egna ideer och ser inte längre än till näsan... Kan kolla av med flaggor vilken person som är aktiv och räkna upp dess tidtagare.
Förstår du mer nu??
/tack för all hjälpSv: System.Timers.Timer
Bygger du ett windows program eller Asp .Net program?
Byger du med win-forms så får ju varje person sin egna tråd. Och sin hantering.
Din lösning låter mer som en global rutin? Win-Service?
//Johan NSv: System.Timers.Timer
Jag har tyckt att programmet har varit segt och det har till och med gått ned vid vissa tillfällen (när det är mycket kommunikation med databasen plus alla timers som är igång,tror jag). Detta får ju inte hända eftersom tiden är kritisk i app, tid får inte gå förlorad under en arbetsdag med programmet.Sv: System.Timers.Timer
Om du kör en timer som varje minut kollar databasen och då återanvänder en o samma connection så skall du inte råka ut för några direkt prestanda problem.
Det bör du inte heller göra om du skulle öppna en ny connection varje minut heller, det hade varit värre om du hade flera 100 samtliga användare.
När tiden slagit i din timer så triggar du ju ett event, i detta kan du gå mot databasen, kolla de poster du vill jämför tiderna och utför det du skall utföra om tiden stämmer.
Vad kör du för databas? access? då kan det faktiskt gå slöare. Är det mkt poster som skall in? om inte kan du ju använda dig av XML istället och hålla denna i minnet hela tiden, så kommer du ytterligare nå prestanda vinster.
//Johan NSv: System.Timers.Timer
Håller tummarna...
Har du fler bra tips så är jag lyhörd.
/SaraSv: System.Timers.Timer
Hoppas det går bra, det borde ju inte gå så segt.
Du kan ju göra en win-service om du vill, som alltid ligger och snurrar i bakgrunden.
Väldigt lätt att göra i Vs .Net
Om du vill hålla din connection öppen så stänger du den inte utan kollar dess state, är den öppen använd den annars öppna en ny.
Nu skall jag göra kladdkaka :-) lite analoga arbeten.
Lycka till.
Mvh Johan NSv: System.Timers.Timer
Tack för all hjälp
/Sara