Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-06 10:43:10 - Anders Vikström, i forum c# (c-sharp), Tråden har 8 Kommentarer och lästs av 796 personer

Undrar om någon har ett passande mönster för mitt lilla trådproblem? Använder mig av BackgroundWorker för att min GUI app inte skall ”sluta svara” under en tyngre läsoperation. Allt eftersom resultatet läses in uppdateras en listvy via ReportProgress/ProgressChanged. Problemet är att läsningen ibland går väldigt fort och min bakgrundsprocess ligger och trycker på GUI-processen så hårt att bl.a. en avbryt-knapp inte längre går att trycka på. Läsningen tar förmodligen mindre tid än uppdateringen av listvyn. Ett enkelt sätt att komma runt problemet vore naturligtvis att lägga in en Thread.Sleep() i loopen i DoWork metoden, men då kanske bakgrundsprocessen ibland kommer att sova i onödan.


Svara

Sv: Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-06 15:00:20 - Ola Lindfeldt

Men låt den sova i typ 100ms, det kommer ju ingen användare att lida av.. :)


Svara

Sv:Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-06 17:23:01 - Anders Vikström

Tack Ola. Det är precis så jag gjort. Pragmatiskt kanske, men det känns liksom inte helt rätt. Och, 100 ms multiplicerat med ett antal tusen blir en del (varför någon skulle vilja ha så många items i en listvy kan man skanske fråga sig, men så är det i alla fall).


Svara

Sv: Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-06 20:11:44 - Simon Dahlbacka

alternativt behöver du ju inte uppdatera UIt för varenda post utan du batchar inhop N poster och lägger till alla på en gång. Lämpligt N kan bestämmas ur stetsons tabell alternativt experimentellt. Titta även på BeginUpdate()/EndUpdate()


Svara

Sv:Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-07 11:11:33 - Oskar Johansson

Mitt förslag

1) Skaffa en timer
2) Skaffa en kö a
4) Timern ska inte autoreseta
5) När workern är klar: Starta timern, om ej startad, varje gång någonting blir klart. Skaffa lämpligt lås, stoppa in i kö a vad som ska läggas till
6) När timern är körd: Skaffa lämpligt lås. "Ta" kö a (lokal variabel, skapa ny instans av kö:n i publika variabeln.) Anropa typ BeginUpdate eller vad det nu heter på listviewen. Arbeta av listan. Anropa End Update


Svara

Sv: Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-10 16:33:18 - Anders Vikström

Tack Simon och Oskar,
Meckade runt lite inspirerad av era förslag. Kom dock fram till en lite annorlunda lösning. Mha följande loop i min bakgrundsprocess lyckas jag hålla hyfsad speed samtidigt som GUI:et svarar:

while (!Process.GetCurrentProcess().Responding)
{
    Thread.Sleep(10);
}


Det ser ut att fungera klockrent men om någon har några invändningar så dissa gärna...


Svara

Sv:Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-10 18:03:55 - Oskar Johansson

Är det ok om jag sågar den totalt? :)

Att polla på det där sättet är inte bra, fler context switches. Och i andra sammanhang så skulle det t.ex. hindra processorn från att sova, vilket är energislöseri ;)

Btw, går den här snurran i tråden som arbetar? Inte kul för prestandan :/


Svara

Sv: Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-17 10:42:08 - Anders Vikström

He, he, såga på du. Jag är bara tacksam för respons.

Och jag hör vad du säger. Det vore naturligtvis bättre om jag kunde söva arbetstråden så länge GUI-tråden är så upptagen att GUI:et inte svarar. Jag har dock ännu inte kommit på något sätt att åstadkomma detta.

Att använda BeginUpdate/EndUpdate var heller ingen hitt. Jag vill ju att man skall kunna se att listvyn fylls och försöker man göra det i intervaller blickar kontrollen så att man riskerar ett epileptiskt anfall.

Ja, snurran går i tråden som arbetar. Och, ja, prestandan blir lidande, men applikationen upplevs som oerhört mycket snabbare (än tidigare). Frågan är hur kostsamt den där pollningen egentligen är. Jag funderar vidare :)


Svara

Sv:Hjälp, min bakgrundsprocess är för snabb!

Postades av 2008-10-17 12:30:29 - Oskar Johansson

Hm. Jag har en bättre idé om du måste frysa tråden: Gör en dummy-invoke. (fönster.Invoke(new någondelegate(någonmetod));, de skickas som window messages. När de returnerar så betyder det att ett antal meddelanden har trillat igenom. Arbetstråden får inte kontrollen förrens det behövs, bättre så.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 707
27 958
271 751
723
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies