Login Register
venerdì 10 febbraio 2012
 
Forums
I Forum di WPF Tips & Tricks
Datagrid Lentissima
Last Post 22 lug 2010 09:34 by Roberto Sarati. 4 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages Not Resolved
hidden
Basic Member
Basic Member
Posts:45
Avatar

--
21 lug 2010 12:52  
Salva a tutti volevo chiedere alcune delucidazini su un fatto strano che sta accadendo.
Premetto che sono alle prime armi con il WPF quindi abbiate pietà di me

Ho creato un semplice window contenente un button e una datagrid il cui codice è allegato di seguito


<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ee="http://schemas.microsoft.com/expression/2010/effects" mc:Ignorable="d" x:Class="MainWindow"
Title="Wpf Add Pimm" Height="350" Width="525">
<Grid>
<DataGrid Height="200" HorizontalAlignment="Left" Margin="0,63,0,0" Name="dgv" VerticalAlignment="Top" Width="503" ItemsSource="{Binding}" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="422,28,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
</Grid>
</Window>


Imports System.Data

Class MainWindow

Private ConnectionString As String = "dsn=MioDataBase"
Private dt As New DataTable("DT")


Private Sub Carica()
Try
dt = New DataTable("DT")
Dim Query As String = "SELECT DIPENDENTI.* FROM DIPENDENTI"
Dim command As New Odbc.OdbcCommand(Query)
Using connection As New Odbc.OdbcConnection(ConnectionString)
command.Connection = connection
connection.Open()
Dim reader As Odbc.OdbcDataReader = command.ExecuteReader
dt.Load(reader)
reader.Close()
connection.Close()
End Using
dgv.DataContext = dt.DefaultView
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
Carica()
End Sub
End Class


Il tutto funziona correttamete se non fosse per il fatto che la datagrid è lentissima per spostarmi in fondo alla griglia ci impiega molto tempo e anche quando utilizzo la scrollbar si muove a scatti.

Da cosa potrebbe dipendere?
Sto sbagliando qualcosa?
Vi ringrazio per il vostro supporto.
Alessandro Del Sole [MVP]
Team
Team
Posts:121
Avatar

--
21 lug 2010 01:39  
Potrebbe dipendere da diversi fattori, anzitutto il numero di elementi che vai a visualizzare. Non sappiamo se il problema si verifica con 100 elementi o con un milione. Poi ho visto che stai facendo autogenerare le colonne al runtime, se ti crei le colonne manualmente cambia qualcosa?

Prova a profilare l'applicazione con il Windows Performance Toolkit che trovi in Windows 7.1 SDK: http://www.microsoft.com/downloads/...3dc8c33a20

E' molto utile per capire gli elementi che stanno causando un maggior overhead.
hidden
Basic Member
Basic Member
Posts:45
Avatar

--
21 lug 2010 02:08  
Penso che il problema sia dovuto all'ernome quantità di dati caricati nella datagrid.
infatti se carico un minor quatitativo di dati il problema non c'è più.

Però la mia domanda è perchè in un'applicazione win forms il problema non c'è?
Infatti ho creato un WindowsApplication con un datagrid e con una datagridview è ho fatto la stessa operazione con la differrenza che nell'applicazione win posso muovermi nella datagrid (e anche nella datagirdview) senza nessun problema di lentezza.

Come mai? Può essere un limite di wpf?

Ora faccio qualche test col Windows performace e ti faccio sapere
Alessandro Del Sole [MVP]
Team
Team
Posts:121
Avatar

--
22 lug 2010 01:09  
Beh, devi sempre pensare al fatto che WPF lavora molto di grafica.. è abbastanza improponibile un confronto tra controlli analoghi in Windows Forms. Anche il rendering di dati avviene tramite DirectX in WPF. Proverei piuttosto a implementare una tecnica di paginazione oppure prova a impostare il supporto per la virtualizzazione come indicato qui:
http://social.msdn.microsoft.com/Fo...16b77ecf28
Roberto Sarati
Veteran Member
Veteran Member
Posts:267
Avatar

--
22 lug 2010 09:34  
E' vero, hai ragione... non è il massimo. Ci sono però alcuni suggerimenti. Il primo è quello, come dice Alessandro, di lavorare con il VirtualizingStackPanel. Dopo potresti impostare manualmente le colonne e soprattutto la loro larghezza; infatti WPF se non ricordo male adatta la dimensione delle colonne in base al loro contenuto, il che comporta il calcolo del contenuto quando fai lo scroll.
Altre cose particolari nel codice postato non ne ho trovate.
You are not authorized to post a reply.

Active Forums 4.2
  
hd porn
 
© 2009-2011 WPF Tips&Tricks Team - Visual Basic Tips&Tricks Network
 
porno izleporno izle