I am trying to use Json.net to serialize and deserialize objects in a generic Windows project. I need to use this library in a background job, and since the memory for background tasks is very limited on a Windows phone, I need to make sure that I do not use too much memory.
The problem I am facing is that Json.net seems to use a lot of memory, which never seems to be freed.
To demonstrate this, I created a small example. Create a new universal application and create a PageLoaded event handler as follows (this example is the same in a Windows application as in a phone application, so it doesn't matter which platform you use):
private void Page_Loaded(object sender, RoutedEventArgs e)
{
List<string> testItems = new List<string>();
List<string> destinationItems;
testItems.Add("Test Item Number 001");
testItems.Add("Test Item Number 002");
testItems.Add("Test Item Number 003");
testItems.Add("Test Item Number 004");
testItems.Add("Test Item Number 005");
testItems.Add("Test Item Number 006");
testItems.Add("Test Item Number 007");
testItems.Add("Test Item Number 008");
testItems.Add("Test Item Number 009");
testItems.Add("Test Item Number 010");
testItems.Add("Test Item Number 011");
testItems.Add("Test Item Number 012");
testItems.Add("Test Item Number 013");
testItems.Add("Test Item Number 014");
testItems.Add("Test Item Number 015");
testItems.Add("Test Item Number 016");
testItems.Add("Test Item Number 017");
testItems.Add("Test Item Number 018");
testItems.Add("Test Item Number 019");
testItems.Add("Test Item Number 020");
testItems.Add("Test Item Number 021");
testItems.Add("Test Item Number 022");
testItems.Add("Test Item Number 023");
testItems.Add("Test Item Number 024");
testItems.Add("Test Item Number 025");
testItems.Add("Test Item Number 026");
testItems.Add("Test Item Number 027");
testItems.Add("Test Item Number 028");
testItems.Add("Test Item Number 029");
testItems.Add("Test Item Number 030");
testItems.Add("Test Item Number 031");
testItems.Add("Test Item Number 032");
testItems.Add("Test Item Number 033");
testItems.Add("Test Item Number 034");
testItems.Add("Test Item Number 035");
testItems.Add("Test Item Number 036");
testItems.Add("Test Item Number 037");
testItems.Add("Test Item Number 038");
testItems.Add("Test Item Number 039");
testItems.Add("Test Item Number 040");
testItems.Add("Test Item Number 041");
testItems.Add("Test Item Number 042");
testItems.Add("Test Item Number 043");
testItems.Add("Test Item Number 044");
testItems.Add("Test Item Number 045");
testItems.Add("Test Item Number 046");
testItems.Add("Test Item Number 047");
testItems.Add("Test Item Number 048");
testItems.Add("Test Item Number 049");
testItems.Add("Test Item Number 050");
testItems.Add("Test Item Number 051");
testItems.Add("Test Item Number 052");
testItems.Add("Test Item Number 053");
testItems.Add("Test Item Number 054");
testItems.Add("Test Item Number 055");
testItems.Add("Test Item Number 056");
testItems.Add("Test Item Number 057");
testItems.Add("Test Item Number 058");
testItems.Add("Test Item Number 059");
testItems.Add("Test Item Number 060");
testItems.Add("Test Item Number 061");
testItems.Add("Test Item Number 062");
testItems.Add("Test Item Number 063");
testItems.Add("Test Item Number 064");
testItems.Add("Test Item Number 065");
testItems.Add("Test Item Number 066");
testItems.Add("Test Item Number 067");
testItems.Add("Test Item Number 068");
testItems.Add("Test Item Number 069");
testItems.Add("Test Item Number 070");
testItems.Add("Test Item Number 071");
testItems.Add("Test Item Number 072");
testItems.Add("Test Item Number 073");
testItems.Add("Test Item Number 074");
testItems.Add("Test Item Number 075");
testItems.Add("Test Item Number 076");
testItems.Add("Test Item Number 077");
testItems.Add("Test Item Number 078");
testItems.Add("Test Item Number 079");
testItems.Add("Test Item Number 080");
testItems.Add("Test Item Number 081");
testItems.Add("Test Item Number 082");
testItems.Add("Test Item Number 083");
testItems.Add("Test Item Number 084");
testItems.Add("Test Item Number 085");
testItems.Add("Test Item Number 086");
testItems.Add("Test Item Number 087");
testItems.Add("Test Item Number 088");
testItems.Add("Test Item Number 089");
testItems.Add("Test Item Number 090");
testItems.Add("Test Item Number 091");
testItems.Add("Test Item Number 092");
testItems.Add("Test Item Number 093");
testItems.Add("Test Item Number 094");
testItems.Add("Test Item Number 095");
testItems.Add("Test Item Number 096");
testItems.Add("Test Item Number 097");
testItems.Add("Test Item Number 098");
testItems.Add("Test Item Number 099");
testItems.Add("Test Item Number 100");
Debug.WriteLine(GC.GetTotalMemory(true));
string saveStr = JsonConvert.SerializeObject(testItems);
Debug.WriteLine(GC.GetTotalMemory(true));
destinationItems = JsonConvert.DeserializeObject<List<string>>(saveStr);
Debug.WriteLine(GC.GetTotalMemory(true));
destinationItems = null;
Debug.WriteLine(GC.GetTotalMemory(true));
}
Debug output:
40236
193084
199624
193472
, , , Json.net 150 . , , , .
Windows, , .
:
- , ?
, - Json, ?
: , Json.net, WinRT.
MSDN (, - Microsoft ) :
WinRT