Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows Phone 8上从XML创建大量UIElement后发生System.OutOfMemoryException_C#_Windows Phone 8_Out Of Memory - Fatal编程技术网

C# 在Windows Phone 8上从XML创建大量UIElement后发生System.OutOfMemoryException

C# 在Windows Phone 8上从XML创建大量UIElement后发生System.OutOfMemoryException,c#,windows-phone-8,out-of-memory,C#,Windows Phone 8,Out Of Memory,嗯,我是Windows Phone的新手 我只是读取一个包含大量数据的XML,并将其保存在一个静态变量上。 当我做一个循环来显示我从XML获得的数据时,我创建了一个画布,其中有两个文本块 但是XML有将近500行信息,所以应用程序创建了500个画布和1000个文本块。 当我尝试在页面之间移动时,应用程序速度太慢,有时会冻结,当我从一个页面移动到另一个页面时,内存没有被释放,几乎所有的方法都会导致应用程序崩溃,OutOfMemory例外 我想知道当我导航到另一个页面时,我是否可以做些什么来处理应用

嗯,我是Windows Phone的新手

我只是读取一个包含大量数据的XML,并将其保存在一个静态变量上。 当我做一个循环来显示我从XML获得的数据时,我创建了一个画布,其中有两个文本块

但是XML有将近500行信息,所以应用程序创建了500个画布和1000个文本块。 当我尝试在页面之间移动时,应用程序速度太慢,有时会冻结,当我从一个页面移动到另一个页面时,内存没有被释放,几乎所有的方法都会导致应用程序崩溃,OutOfMemory例外

我想知道当我导航到另一个页面时,我是否可以做些什么来处理应用程序上使用的内存,或者是否有一些方法可以使用更少的内存在同一个XAML中显示所有这些数据

OBS:仅加载页面就占用了近130MB的内存,而手机的应用程序容量仅为150MB

编辑:

private void empilharp参与者()
{
字符串nomeTitulo,Nomempresa;
整数裕度=0;
SolidColorBrush corTexto=新的SolidColorBrush();
corTexto.Color=Color.FromArgb(255、103、103、103);
SolidColorBrush corCanvas=新的SolidColorBrush();
corCanvas.Color=Color.FromArgb(255、242、242、242);
items=来自App.xmlParticipantes.substands(“Participante”)中的查询
orderby query.Element(“title”).Value
选择新的ABPI.Classes.Participantes
{
nome=(string)query.Element(“title”),
empresa=(string)query.Element(“公司”),
email=(字符串)query.Element(“email”),
telefone=(字符串)query.Element(“电话”),
profissao=(字符串)query.Element(“文本”),
endereco=(字符串)query.Element(“地址”)
};
var itemsArray=items.ToArray();
对于(int i=0;i30)
{
nometutolo=itemsArray[i].nome.子串(0,30)+“…”;
}
其他的
{
nomeTitulo=itemsArray[i].nome;
}
if(itemsArray[i].empresa.Length>35)
{
nomempresa=itemsArray[i].empresa.Substring(0,35)+“…”;
}
其他的
{
nomempresa=itemsArray[i].empresa;
}
TextBlock titulo=newtextblock{Text=nomettitulo,TextWrapping=TextWrapping.Wrap,FontSize=25,front=corTexto};
Canvas.SetLeft(titulo,30岁);
Canvas.SetTop(titulo,15岁);
TextBlock empresa=newtextblock{TextWrapping=TextWrapping.Wrap,Text=nomempresa,FontSize=20,front=corTexto};
Canvas.SetLeft(empresa,30);
Canvas.SetTop(empresa,45);
cnv.Tap+=neweventhandler(uriParametro);
cnv.Children.Add(titulo);
cnv.Children.Add(empresa);
内容。儿童。添加(cnv);
保证金=保证金+100;
}
txtbusca2.ItemsSource=lista;
ContentPanel.高度=边距;
内容。高度=边距;
oScroll.Content=内容;

循环结束后,我将画布(内容)放入ScrollViewer(oScroll)中,但当我离开页面时,内存没有被释放,因此当我尝试转到其他任何地方时,应用程序会与System.OutOfMemoryException崩溃。您需要显式删除这些控件。处理
卸载的
事件或覆盖
OnNavigatedFrom()
方法,只需删除所有子项即可

LayoutRoot.Children.Clear();

发布用于填充此内容的容器数据模板。它是ListView、Panorama、Pivot…等。我将创建的每个画布放在“主”画布上。之后,我将此主画布放在“ContentPanel”内的Scrollviewer上grid。我将编辑我的帖子以显示代码。我尝试了OnNavigatedFrom,但它不工作,应用程序没有使用LayoutRoot.Children.Clear()处理内存
LayoutRoot.Children.Clear();