- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,用户像书本一样使用枢轴,他翻转枢轴项目直到他点击最后一个,然后我删除现有的枢轴项目并加载新的。这一切只需将 Pivot.ItemsSource
属性指向一个新的项目集合即可完成。
我注意到随着时间的推移,内存消耗会增加并且永远不会降低。似乎 Pivot 的 VisualTree 没有得到垃圾收集。
我创建了一个示例应用程序来演示该问题(这是一个 WP8 应用程序):
重现步骤:
点击加载更多按钮几次。
(一次加载 100 个项目,这当然不是我在真实环境中所做的 应用程序,但它清楚地展示了内存 每次消费越来越高,导航回来也不会清零)
对于降低内存的任何提示或建议,我将不胜感激,事实上,如果以这种方式使用足够长的时间,应用程序将不可避免地崩溃。
MainPage.xaml:
...
<HyperlinkButton NavigateUri="/Page1.xaml">
Page1
</HyperlinkButton>
...
MainPage.xaml.cs:
//...
public MainPage()
{
InitializeComponent();
var timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(2);
timer.Tick += delegate
{
Debug.WriteLine("{0:f} MB, {1:f} MB",
DeviceStatus.ApplicationCurrentMemoryUsage/(1024.0*1024),
DeviceStatus.ApplicationPeakMemoryUsage/(1024.0*1024));
};
timer.Start();
}
//...
Page1.xaml:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" />
<TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" />
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<phone:Pivot x:Name="pivot1" ItemsSource="{Binding Items}">
<!--Pivot item one-->
<phone:Pivot.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
<Button Click="Load_More">Load More</Button>
</StackPanel>
</Grid>
</Grid>
Page1.xaml.cs:
public partial class Page1 : PhoneApplicationPage, INotifyPropertyChanged
{
private List<int> _items;
public List<int> Items
{
get
{
if (_items == null)
{
_items = new List<int>();
}
return _items;
}
set
{
_items = value;
RaisePropertyChanged("Items");
}
}
public Page1()
{
InitializeComponent();
DataContext = this;
}
private void Load_More(object sender, RoutedEventArgs e)
{
var lst = new List<int>();
//100 new items just for demonstration, in reality i won't have more than 6 new items
for (int i = 0; i < 100; i++)
{
lst.Add(i);
}
pivot1.SelectedIndex = 0;
Items=lst;
}
public event PropertyChangedEventHandler PropertyChanged;
void RaisePropertyChanged(string property)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(property));
}
}
~Page1()
{
Debug.WriteLine("Page1 GC");
}
}
最佳答案
Pivot 控件似乎泄漏了,正如使用 Panorama 控件所证明的那样。用这个替换你的堆栈面板(我没有更改控件的名称)不会泄漏。 (内存被回收大约 50 兆)
<StackPanel>
<Button Click="Load_More">Load More</Button>
<phone:Panorama x:Name="pivot1" ItemsSource="{Binding Items}">
<phone:PanoramaItem></phone:PanoramaItem>
</phone:Panorama>
</StackPanel>
关于c# - 通过绑定(bind)使用 Pivot 的 ItemsSource 属性时发生内存泄漏(+ 重现代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15052230/
这是在 https://stackoverflow.com/questions/12639454/make-scalacheck-tests-deterministic 中作为“奖金问题”提出的,但没
我的项目使用 Angular 6 和 Leaflet 1.2。 我想重现当用户在 Leaflet map 上保持右键或左键单击时的拖动效果。例如,我希望在不断按下空格键时能够开始拖动 map 。 我已
我们正在将我们的用户身份验证从提供的 .NET 实现迁移到我们自己的系统。 我们希望能够支持存在于 aspNet_Membership 表中的旧密码。 Password 和 Salt 位于该表中,因此
我有一个二进制文件,它在 99% 的时间里都运行良好。有时,我无法理解,它会因这个输出而崩溃。在我重新启动之后,一切正常。 二进制是一个模板系统。它读取了一些带有占位符的模板,例如{%foo%} 或
我试图在 c 中重现 strcpy 的行为,我的问题是该函数有效但它在末尾附加了额外的东西。 char *ft_strcpy(char * dst, const char * src) { in
我最近遇到了可怕的 UserPreferenceChanged 事件 UI 卡住问题,随后我解决了可能的原因,例如: 调用单个控件而不是主应用程序表单(参见 https://stackoverflow
在 Scala 编程中,我可以读到 ==运算符的行为就像是这样定义的: final def == (that: Any): Boolean = if (null eq this) {null eq t
我正在和我的 friend 一起开发 Django 项目。该项目依赖于一些 python 模块。我在 virtualenv 中安装了 django 和其他依赖项。 django 项目的代码位于一个存储
关于spark的大多数问题都使用show作为代码示例,没有生成数据帧的代码,如下所示: df.show() +-------+--------+----------+ |USER_ID|locatio
我正在尝试重现 java.lang.OutOfMemoryError: unable to create new native thread但是使用 -Xss VM 参数。我猜想如果我们有大量线程,并
我正在尝试在自定义 alertView 中插入表格 View 。我需要实现与默认警报相同的样式。从 Debug View Hierarchy 我几乎复制了样式,但我无法弄清楚 Apple 如何设置模糊
标准是否保证如果 std::mt19937 被相同的数字播种,它会在所有平台上产生相同的数字序列? 换句话说,它的实现是否由标准明确定义,或者像 std::rand() 一样被视为实现细节? 最佳答案
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的
我有一个网站可以从 BingPreview/1.0b* 获得访问,这很可能是 Bing 的机器人。 我收到一个错误,它似乎无法找到我非常确定应该存在的 DOM 元素。我没有从任何其他浏览器(在所有主要
有谁知道如何重现 new Notes new scanning feature在 iOS 11 中?? AVFoundation 是否用于相机? 摄像头如何检测纸张/文档/卡片的形状? 他们如何实时放
您好! 作为使用 Objective-C 开发 iPhone 应用程序的初学者,我想知道重新创建 iPhone SMS 应用程序 UI(带有消息气泡等的用户界面)的最简单方法是什么 我考虑过将 UIT
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How can the built-in range function take a single argu
虽然这很可能是我自己犯的错误,但有人可以帮助我。我有一个包含 6 个数据点的极坐标图,在绘制时仅显示 5 个数据点。如果这是一个问题,我会在 GitHub 上打开 1,但我在想,如果它归结于我糟糕的代
我正在尝试使用 rCharts 重现简单的示例绘图库 sankey图表。我发现this example from scratch并尝试重现它,但是,我遇到了一些问题。 首先,我尝试在没有任何内容的情况
进入 Haskell,我试图重现 numpy's reshape 之类的东西与列表。具体来说,给定一个平面列表,将其 reshape 为一个 n 维列表: import numpy as np a =
我是一名优秀的程序员,十分优秀!