LS、
私はアプリケーションを構築しています。アプリケーションは 2 つの画面で構成されます。最初の画面でユーザーはファイルを選択でき、2 番目の画面ではファイルがグラフとデータ グリッドと共に表示されます。
現在、このアプリケーションには 2 つの大きな問題があります。
最初の問題は、グラフへのデータのバインドに非常に時間がかかることです (データ セットが 85 アイテムの場合、バインド時間は最大 40 秒かかる場合があります)。
2 番目の問題は、2 番目のページから最初のページに戻ると、2 番目のページが破棄されないことです。メモリを使い果たし続けます。これは最初の問題に影響を与え、製本時間がさらに長くなります。
誰でもこの問題で私を助けることができますか? (明確なコード例付き)
次のコードを使用して画面を切り替えます。
<Grid x:Name="LayoutRoot">
<Grid x:Name="NavigationGrid" HorizontalAlignment="Stretch" VerticalAlignment="Top" Background="LightGray">
<StackPanel x:Name="LinksStackPanel" Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0">
<HyperlinkButton x:Name="Link1" Width="100" Height="30" NavigateUri="/Home" TargetName="ContentFrame" Content="Home" />
</StackPanel>
<StackPanel x:Name="LinksStackPanel2" Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="100,0,0,0">
<HyperlinkButton x:Name="Link2" Width="100" Height="30" NavigateUri="/DataPage" TargetName="ContentFrame" Content="DataPage" />
</StackPanel>
</Grid>
<Border x:Name="ContentBorder" Margin="0,30,0,0">
<navigation:Frame x:Name="ContentFrame" Source="/Home" >
<navigation:Frame.UriMapper>
<uriMapper:UriMapper>
<uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
<uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
</uriMapper:UriMapper>
</navigation:Frame.UriMapper>
</navigation:Frame>
</Border>
</Grid>
最初のページのコードはそれほど重要ではありません。2 番目のページで開くファイル名を選択できる選択フィールドが含まれています。テスト アプリケーションを作成し、このページを空のままにしましたが、それでもメモリ リークが発生しました。
2 ページ目のコードは次のとおりです。
public partial class DataPage : Page
{
private List<Classes.Data> dataList = new List<Classes.Data>();
public DataPage()
{
InitializeComponent();
setData(); //Get data, normaly from database.
MainDataGrid.ItemsSource = dataList; //Bind data from datalist to datagrid
bindChart(); //Bind data from datalist to chart.
}
private void setData()
{
Classes.Data data = new Classes.Data() { distance = 1, name = "First item", var1 = 1, var2 = 2, var3 = 3, var4 = 4, var5 = 5 };
dataList.Add(data);
data = new Classes.Data() { distance = 1.5, name = "Second item", var1 = 1.5, var2 = 2.5, var3 = 3.5, var4 = 4.5, var5 = 5.5 };
dataList.Add(data);
data = new Classes.Data() { distance = 2, name = "Third item", var1 = .5, var2 = 1.5, var3 = 2.5, var4 = 3.5, var5 = 4.5 };
dataList.Add(data);
data = new Classes.Data() { distance = 2.5, name = "Fourth item", var1 = 3, var2 = 4, var3 = 5, var4 = 6, var5 = 7 };
dataList.Add(data);
data = new Classes.Data() { distance = 3, name = "Fifth item", var1 = 0, var2 = 1, var3 = 2, var4 = 3, var5 = 4 };
dataList.Add(data);
}
private void bindChart()
{
for (int i = 0; i < 5; i++)
{
//Bind each Lineseries to datalist.
LineSeries lineSeries = (LineSeries)dataChart.Series[i];
lineSeries.ItemsSource = dataList;
}
}
private void backBtn_Click(object sender, RoutedEventArgs e)
{
Home home = this.Parent as Home; //Get parent.
home.Change_ContentFrame(new Home()); //Set parent to new page.
}
//Data grid events. - Start.
private void MainDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
}
private void MainDataGrid_KeyDown(object sender, KeyEventArgs e)
{
}
private void MainDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
private void MainDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
}
//Data grid events. - End.
//Data chart events. - Start.
private void dataChart_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
private void dataChart_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
}
private void dataChart_KeyDown(object sender, KeyEventArgs e)
{
}
//Data chart events. - End.
}