2012-03-28 2 views
1

Ich versuche, folgenden Code zu verwenden, aber ich bekomme keine gute Leistung in meiner Anwendung.Wie erhöhe ich die Geschwindigkeit beim Abrufen von Bildern und Text aus der Datenbank?

Ich habe eine Liste von 2000 Bildern in "dt_Images.ToList()".

In cs:

foreach (var dr in dt_Images.ToList()) 
      { 
       BTN = new Button(); 
       BTN.Name = dr.Name.ToString(); 
       BTN.Image = dr.Image; 
       BTN.Text = dr.text.ToString(); 
       flowLayoutPanel1.Controls.Add(BTN); 
       BTN.Click += new EventHandler(this.pic_Click); 
      } 

Ich habe auch versucht mit Listview zu binden, jedoch nicht die gewünschte Geschwindigkeit zu bekommen.

Wie kann ich die Geschwindigkeit beim Binden mit flowLayoutPanel erhöhen?

kann ich direkte DataSource in Kontrolle binden? welche steuerung habe ich dann benutzt?

Bitte helfen Sie mir

+0

Bilder werden als BLOB-Daten in der Datenbank gespeichert und haben ein hohes Gewicht. Ist es möglich, diese Informationen vorab abzurufen und in Ihrem Speicher zu halten? 2000 ist kein großer Brocken, vorausgesetzt, Ihre Bilder sind relativ klein (in KB und nicht in MB) – questzen

+0

Mein Bild ist in KB, aber dauert 2 Minuten, um dieses Formular zu laden. @questizen – Tulsi

+0

Datenbank holen ist zeitaufwendig. Sie können die Bearbeitungszeit verkürzen, indem Sie die Bilder im lokalen Speicher zwischenspeichern. Versuchen Sie diese 2000 Objekte vorher zu initialisieren, wenn Ihre Anwendung dies zulässt. – questzen

Antwort

0

Ich kann sehen, dass Sie ein FlowLayout Panel verwenden. Ich vermute, dass jedes Mal, wenn Sie ein untergeordnetes Steuerelement hinzufügen, das gesamte Layout erneut erstellt wird, was auch viel Zeit in Anspruch nehmen kann.

Können Sie versuchen, die ganze Schleife auf diese Weise zu umschließen:

flowLayoutPanel1.SuspendLayout(); 

foreach (var dr in dt_Images.ToList()) 
     { 
      BTN = new Button(); 
      BTN.Name = dr.Name.ToString(); 
      BTN.Image = dr.Image; 
      BTN.Text = dr.text.ToString(); 
      flowLayoutPanel1.Controls.Add(BTN); 
      BTN.Click += new EventHandler(this.pic_Click); 
     } 

flowLayoutPanel1.ResumeLayout(); 

Sie können sogar noch bessere Leistungen zu erzielen versuchen, indem das Bild mit den Antworten zu deaktivieren here.

1

Ich denke, in der Regel müssen Sie nur das Bild, das Sie zeigen zum Download und die wenigen um. Also, wenn Sie die 5 Afters und die 5 vor dem aktuellen herunterladen, wird Ihre Geschwindigkeit in Ordnung sein.

0

Wir können die Leistung nicht immer verbessern, aber wir können die wahrgenommene Leistung definitiv verbessern. Angenommen, Sie entwickeln eine UI-Anwendung, beachten Sie bitte die folgende Logik.

Als Teil der Anwendung starten, versuchen Sie, alle Bilder und relevanten Daten zu holen. Das ist zeitaufwendig, aber keine Sorge. Cache diese Objekte im Speicher (HashMap?). Wenn Sie einen Flow-Bereich für einen Benutzer erstellen müssen, versuchen Sie, im Cache nachzusehen und das Image schnell zu rendern.

Die SQL-Anweisung, die Sie ausführen, erzwingt eine Datenbankrundreise. Versuchen Sie, ein 'select *' ohne where-Bedingung (Bulk Fetch) zu machen, um den Cache zu füllen.

0

Vielleicht sollten Sie nur eine Schaltfläche erstellen, wenn Sie sie verwenden möchten. (. Oder ein paar von ihnen wie in ykatchou ‚s Antwort)

Auch wenn Sietun wollen, dass sie alle auf einmal schaffen - Sie vielleicht besser dran zu schaffen sie ein BackgroundWorker verwenden.

Verwandte Themen