Ich entwickle ein Projekt (WPF) und ich habe ein Datagrid die mehr als 5000 Datensätze aus der Datenbank laden, so habe ich einen BackgroundWorker um den Benutzer die Daten zu laden, aber es ist so langsam, ich muss warten fast 2 Minuten, um die Daten von der Datenbank zu laden, wenn ich nicht den BackgroundWorker verwende, muss ich nur 3 Sekunden warten, um die Daten im Datagrid zu laden.BackgroundWorker langsam
Hier schreibe ich den Code-Schnipsel nach unten, die ich für den Background verwenden:
private void RunWorker()
{
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker senderWorker = sender as BackgroundWorker;
dc = new DataClasses1DataContext();
var query = from c in dc.Contact_DDBB_Xavis
select
new
{
c.ContactID,
c.Continent,
c.Country,
c.City,
c.PostalCode,
c.CompanyName,
c.UserCreated,
c.DateCreated,
c.UserModified,
c.DateModified
};
if (query.Count() > 0)
{
for (int i = 0; i < query.Count(); i++)
{
int progressInPercent = (int)(((decimal)(i + 1)/(decimal)query.Count()) * 100);
worker.ReportProgress(progressInPercent, i);
System.Threading.Thread.Sleep(10);
e.Result = query.ToList();
}
}
if (senderWorker.CancellationPending)
{
e.Cancel = true;
}
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
this.dataGrid.DataContext = e.Result;
backGround.Visibility = Visibility.Collapsed;
duracel.Visibility = Visibility.Collapsed;
txtBackWORK.Visibility = Visibility.Collapsed;
}
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
for (double i = 0.0; i < e.ProgressPercentage; i++)
{
duracel.pthFiller.Width = 0;
double max = 312;
max = (double)e.ProgressPercentage;
duracel.pthFiller.Width = e.ProgressPercentage * 3.12;
duracel.txtStatus.Text = e.ProgressPercentage + " %";
txtBackWORK.Text = String.Format("Loading " + e.ProgressPercentage + " %");
}
}
jetzt weiß ich nicht, wenn es etwas falsch in meinem Code ist so frage ich Ihnen einige Ratschläge, wie schneller lädt die Daten aus der Datenbank ohne Wartezeit so lange Zeit.
Vielen Dank für Ihre Aufmerksamkeit.
Viel Spaß.
Prost
Ehrlich gesagt, wenn ich Probleme mit langsamem Code hatte, würde ich als Erstes die 'Sleep()' Aufrufe herausnehmen. –