私は現在、Windows Mobile 6.1 (WP ではない) で動作するアプリケーションに取り組んでいます。リモート サーバーからのデータを 1 日に複数回同期するアプリケーションを作成しました。でもなんとなく、このデータは終わった後に「記憶」されているようです。タスク マネージャーは、アプリケーションの通常の起動時に約 3MB が使用されていることを示しており、同期を実行するたびに約 2MB ずつ増加します。何度かメモリ使用量の警告が表示され、デバイスをリセットするか、プログラムを再起動する必要があります。
私が探しているのは、一種のガベージ コレクターである、同期後にデータをクリアする方法です。(通常の) C# では Collect() を見つけましたが、これを C# モバイルで動作させることはできません。
以下は私のコードで、特定の時点で「Geheugentekort」(「メモリ不足」) というメッセージが表示されることを除いて、正しく動作しています。
おそらく for{} コードの後で、doc、root、XmlNodeList などの変数を空にする必要がありますが、問題はその方法です...
私のデバイス: Pidion BIP-5000 OS: 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