<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Runtime 10.1.1: Memory Leak in CoordinateConversion class in ArcGIS Runtime SDK for WPF (Retired) Questions</title>
    <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-wpf-retired-questions/runtime-10-1-1-memory-leak-in-coordinateconversion/m-p/337325#M1677</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much for the focussed example - I've reproduced and raised a bug.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mike&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 21 Jun 2013 08:51:50 GMT</pubDate>
    <dc:creator>MichaelBranscomb</dc:creator>
    <dc:date>2013-06-21T08:51:50Z</dc:date>
    <item>
      <title>Runtime 10.1.1: Memory Leak in CoordinateConversion class</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-wpf-retired-questions/runtime-10-1-1-memory-leak-in-coordinateconversion/m-p/337324#M1676</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am using version 10.1.1 of the ArcGIS Runtime SDK for WPF.&amp;nbsp; A class that I think was just added in 10.1.1 is the CoordinateConversion class which makes it easier to convert to/from different spatial references.&amp;nbsp; Recently, when using this class for our coordinate projections we noticed our application started crashing with out of memory exceptions.&amp;nbsp; After writing a test program, I was able to verify that the CoordinateConversion class is leaking memory.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are 3 cases that I tested for: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.&amp;nbsp; Use CoordinateConversion class to convert from spatial reference 4326 to 102100 (WGS84 to WebMercator).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.&amp;nbsp; Use CoordinateConversion class to convert from spatial reference 4326 to 4326 (basically a no-op).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3.&amp;nbsp; Use the WebMercator class to convert from spatial reference 4326 to 102100.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I found that only the first case causes it to leak memory.&amp;nbsp; And from examining it with a memory profiler there appeared to be a very large amount of strings and character arrays that were leaking.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is my test program:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;using System;
using ESRI.ArcGIS.Client.Geometry;
using ESRI.ArcGIS.Client.Projection;

namespace CoordinateProjectorTest
{
&amp;nbsp; internal static class Program
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static readonly Random Random = new Random();

&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void Main( string[] args )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var isConvertingToWebMercator = Convert.ToBoolean( args[0] );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var useCoordinateConversion = Convert.ToBoolean( args[1] );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var spatialReference = new SpatialReference( isConvertingToWebMercator ? 102100 : 4326 );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var webMercator = new WebMercator();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( useCoordinateConversion )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( var i = 0; i &amp;lt; 1000000; i++ )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine( "{0}: {1}", i, CreateRandomCoordinate( spatialReference ) );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( var i = 0; i &amp;lt; 1000000; i++ )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine( "{0}: {1}", i, webMercator.FromGeographic( CreateRandomMapPoint() ) );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadKey();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; private static MapPoint CreateRandomCoordinate( SpatialReference spatialReference )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var latSign = Random.Next( 0, 2 ) == 0 ? "N" : "S";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var lonSign = Random.Next( 0, 2 ) == 0 ? "E" : "W";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var coord = String.Format( "{0}{1} {2}{3}", CreateRandomDouble( 90.0 ), latSign, CreateRandomDouble( 180.0 ), lonSign );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return CoordinateConversion.DecimalDegreesToMapPoint( coord, spatialReference );
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; private static MapPoint CreateRandomMapPoint()
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new MapPoint( CreateRandomDouble( 180.0 ), CreateRandomDouble( 90.0 ), new SpatialReference( 4326 ) );
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; private static double CreateRandomDouble( double factor )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Random.NextDouble() * factor;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
}
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Just copy this code into an x86 console application and watch the memory usage.&amp;nbsp; Note: if you compile this into a x64 (or AnyCPU on a 64-bit computer) build platform target it won't actually run out of memory but memory usage will be very high.&amp;nbsp; The input parameters to make it crash are "true true" on the command line when running this program.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Jun 2013 17:39:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-wpf-retired-questions/runtime-10-1-1-memory-leak-in-coordinateconversion/m-p/337324#M1676</guid>
      <dc:creator>BrianMulllins</dc:creator>
      <dc:date>2013-06-20T17:39:26Z</dc:date>
    </item>
    <item>
      <title>Re: Runtime 10.1.1: Memory Leak in CoordinateConversion class</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-wpf-retired-questions/runtime-10-1-1-memory-leak-in-coordinateconversion/m-p/337325#M1677</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much for the focussed example - I've reproduced and raised a bug.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mike&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Jun 2013 08:51:50 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-wpf-retired-questions/runtime-10-1-1-memory-leak-in-coordinateconversion/m-p/337325#M1677</guid>
      <dc:creator>MichaelBranscomb</dc:creator>
      <dc:date>2013-06-21T08:51:50Z</dc:date>
    </item>
  </channel>
</rss>

