2010-05-16 4 views
3

J'ai un thread qui supprime les données d'une file d'attente et les écrit dans le fichier STDIN d'une autre application. J'utilise Stream, mais avec .Write et même .BeginWrite, quand j'envoie des morceaux de 1mb à la deuxième application, mon interface graphique devient laggy pour ~ 1sec. Pourquoi? Mes callbacks sont quelque chose comme ceci:L'écriture de flux est en retard sur mon interface graphique

void Progress(object sender, ProgressArgs e) { 
     if (this.InvokeRequired) { 
      this.BeginInvoke(new MethodInvoker(delegate() { Progress(sender, e); })); 
      return; 
     } 

     progressBar1.Value = (int) e.PercentDone; 
    } 
+0

Quel est le débit du processus en aval? –

+1

Avez-vous essayé d'utiliser un profileur de code (comme les produits offerts par Jet Brains ou Red-Gate) pour voir ce qui pourrait causer le décalage? – Kane

+0

Quel ordinateur utilisez-vous? S'il s'agit d'un ordinateur à un seul cœur et à faible vitesse de bus, cette opération pourrait facilement prendre du retard sur votre interface graphique (et le reste de votre ordinateur). –

Répondre

0

Je dirais que vous appelez ces callbacks trop souvent, de sorte qu'ils obstruent votre file d'attente de messages avec BeginInvoke messages. Essayez d'enregistrer la dernière valeur de pourcentage reçue et d'appeler BeginInvoke uniquement lorsque le nouveau est différent du dernier.

+0

Bon conseil, mais je suis sûr que le problème provient de la méthode .Write car même si je supprime mes callbacks sur le gui, il reste en retard. – blez