1

LS,

我正在构建一个应用程序。该应用程序由两个屏幕组成。在第一个屏幕上,用户可以选择一个文件,在第二个屏幕上,该文件显示一个图表和一个数据网格。

目前我对这个应用程序有两个大问题。

第一个问题是数据绑定到图表需要很长时间(如果数据集是 85 项,绑定时间可能需要 40 秒)。

第二个问题是当我从第二页回到第一页时,第二页没有被处理。它继续耗尽内存。这反过来又会对第一个问题产生影响,使绑定时间更长。

有人可以帮我解决这个问题吗?(带有清晰的代码示例)

我使用以下代码来切换屏幕:

<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>

第一页的代码不是很重要。它包含一个选择字段,您可以在其中选择将在第二页中打开的文件名。我制作了一个测试应用程序并将此页面留空,但仍然存在内存泄漏。

第二页的代码是:

    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.
}
4

0 回答 0