我目前正在开发一个在Windows Mobile 6.1(不是WP)上运行的应用程序。我构建了一个应用程序,它每天多次同步来自远程服务器的数据。但不知何故,看起来这些数据在完成后会被“记住”。任务管理器显示在应用程序的常规启动时使用大约3MB,每次运行同步时大约增加2MB。多次后,我收到内存使用警告,我必须重置设备或重新启动程序。
我正在寻找的是在同步后清除数据的一些方法,一种垃圾收集器。在(常规)C#中我发现了Collect(),但我无法在C#mobile中使用它。
下面是我的代码,它正常工作,除了在某个时刻我收到消息“Geheugentekort”(“内存不足”)。
可能在for {}代码之后,我必须清空doc,root和XmlNodeList之类的变量,但问题是如何......
我的设备:Pidion BIP-5000 操作系统:Windows Mobile 6.1
XmlDocument doc = new XmlDocument();
doc.Load(xmlUrl);
XmlElement root = doc.DocumentElement;
try
{
totaal = Int32.Parse(doc.GetElementsByTagName("Totaal")[0].InnerText.ToString());
// Create lists with values
XmlNodeList namen = doc.GetElementsByTagName("naam");
XmlNodeList ptypen = doc.GetElementsByTagName("ptype");
XmlNodeList ids = doc.GetElementsByTagName("id");
// Door het totaal heen itereren
for (int i = 0; i < totaal; i++)
{
// Create variables of it
int id = Int32.Parse(ids[i].InnerText.ToString());
int ptype = Int32.Parse(ptypen[i].InnerText.ToString());
string naam = namen[i].InnerText.ToString();
// Check if ID exists
int tot = this.tbl_klantTableAdapter.GetData(id).Count;
if (tot == 0)
{
// New item, add
this.tbl_klantTableAdapter.Insert(naam, ptype, id);
}
else
{
// Existing, update
this.tbl_klantTableAdapter.Update(naam, ptype, id);
}
}
}
catch
{
// Rest of code
答案 0 :(得分:1)
在循环可能有用之后处理节点列表
System.Xml.XmlNodeList tempNodelist = Your stuff;
IDisposable disposeMe = tempNodelist as IDisposable;
if (disposeMe != null)
{
disposeMe.Dispose();
}
答案 1 :(得分:1)
XmlNodeList实现了IDisposable,因此您可以调用namen.Dispose()
(也用于其他XmlNodeList对象)来强制丢弃和清除对象。
答案 2 :(得分:0)
是的,你肯定应该在本地使用XML东西并在使用XML之后进行处理。 xml的东西似乎是ocupie大内存块。
您应该使用nameX.Dispose()和nameX = null来释放用于这些临时xml对象的内存。
您可以使用GC.Collect()强制收集内存:http://blogs.msdn.com/b/stevenpr/archive/2004/07/26/197254.aspx。
您也可以使用远程.Net性能查看器获取内存使用情况:http://blogs.msdn.com/b/stevenpr/archive/2006/04/17/577636.aspx
如果您的应用在调用同步任务之前消耗了大量内存,您可以考虑使用单独的同步过程创建新应用程序。将函数移动到库时,还可以为进程释放内存。 WM6.1及更高版本为紧凑的Framework库提供了一个新的内存插槽,因此不会降低主进程内存插槽:http://blogs.msdn.com/b/robtiffany/archive/2009/04/09/memmaker-for-the-net-compact-framework.aspx
如果您需要更多帮助,请提供更多详细信息/代码。