Json.net memory usage

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

+4
1

, , GC , GC.GetTotalMemory(true). , .

, JSON.NET / , . / / .

+3

All Articles