<?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 Slow/Laggy performance when doing map identify with web imagery basemap in ArcGIS Runtime SDK for iOS Questions</title>
    <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4748#M43</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Found this post over in the QT forum from a couple of years ago:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.esri.com/message/705538-identifylayers-is-much-slower-with-basemaptypeimagery-than-with-basemaptypestreets"&gt;https://community.esri.com/message/705538-identifylayers-is-much-slower-with-basemaptypeimagery-than-with-basemaptypestreets&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm experiencing this same issue with 100.4/5 - has anyone else experienced this? &amp;nbsp;Map taps when a web imagery basemap is displayed are very slow and laggy.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 03 Jul 2019 18:18:27 GMT</pubDate>
    <dc:creator>MichaelDavis3</dc:creator>
    <dc:date>2019-07-03T18:18:27Z</dc:date>
    <item>
      <title>Slow/Laggy performance when doing map identify with web imagery basemap</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4748#M43</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Found this post over in the QT forum from a couple of years ago:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.esri.com/message/705538-identifylayers-is-much-slower-with-basemaptypeimagery-than-with-basemaptypestreets"&gt;https://community.esri.com/message/705538-identifylayers-is-much-slower-with-basemaptypeimagery-than-with-basemaptypestreets&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm experiencing this same issue with 100.4/5 - has anyone else experienced this? &amp;nbsp;Map taps when a web imagery basemap is displayed are very slow and laggy.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jul 2019 18:18:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4748#M43</guid>
      <dc:creator>MichaelDavis3</dc:creator>
      <dc:date>2019-07-03T18:18:27Z</dc:date>
    </item>
    <item>
      <title>Re: Slow/Laggy performance when doing map identify with web imagery basemap</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4749#M44</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have experienced something similar at 100.3 and 100.5.&amp;nbsp; I use a map identify just for offline operational layers, retrieving results in a fraction of a second.&amp;nbsp; We allow our users to load an online basemap but we don't use any identify results from those online layers.&amp;nbsp; I recently fixed a "bug" where identify performance slowed at times to more than 10 seconds only when they had one of these basemaps.&amp;nbsp; Since the Sdk does not yet support a layer exclusion list in the identify function like some other Esri tools have in the past, my solution was to remove any online layer right before the call to identify the layers, and then restore it right after.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This produced a brief flash in the UI as the map refreshes automatically before and after my change, but it resolved the performance issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm afraid I didn't test relative performance among online&amp;nbsp;basemaps.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jul 2019 18:34:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4749#M44</guid>
      <dc:creator>ReedHunter</dc:creator>
      <dc:date>2019-07-03T18:34:35Z</dc:date>
    </item>
    <item>
      <title>Re: Slow/Laggy performance when doing map identify with web imagery basemap</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4750#M45</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ahh sounds like we are basically doing the same thing. &amp;nbsp;I'm surprise this is still around given the post I referenced was from 2017. &amp;nbsp;I'll file a bug report through our organization account to see if we can get it prioritized for fixing...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jul 2019 19:47:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4750#M45</guid>
      <dc:creator>MichaelDavis3</dc:creator>
      <dc:date>2019-07-03T19:47:21Z</dc:date>
    </item>
    <item>
      <title>Re: Slow/Laggy performance when doing map identify with web imagery basemap</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4751#M46</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;While we consider ways to improve this experience, the recommended solution is to loop over the &lt;A href="https://developers.arcgis.com/ios/latest/api-reference/interface_a_g_s_map.html#ae165f15ee8b4262e06eafe8fa153f5a1" rel="nofollow noopener noreferrer" target="_blank"&gt;&lt;STRONG&gt;AGSMap.operationalLayers&lt;/STRONG&gt;&lt;/A&gt; and call &lt;A href="https://developers.arcgis.com/ios/latest/api-reference/interface_a_g_s_geo_view.html#a27b0c4848d70a112dff1c07328f1b1b8" rel="nofollow noopener noreferrer" target="_blank"&gt;&lt;STRONG&gt;identifyLayer&lt;/STRONG&gt;&lt;/A&gt; for each layer where &lt;STRONG&gt;&lt;A href="https://developers.arcgis.com/ios/latest/api-reference/interface_a_g_s_layer.html#aa59ae13e8a8b28391e9168668ac4a3d8" rel="nofollow noopener noreferrer" target="_blank"&gt;identifyEnabled&lt;/A&gt;&lt;/STRONG&gt; is &lt;STRONG&gt;true&lt;/STRONG&gt;.&amp;nbsp;It's what we do behind the scenes, but excluding the basemap layers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There do happen to be&amp;nbsp;benefits to this approach for some use cases. In particular, you can provide more granular feedback to your users as each layer's results return. But of course you can also limit the layers being identified against.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To coordinate the results, you could use a &lt;A href="https://developer.apple.com/documentation/dispatch/dispatchgroup" rel="nofollow noopener noreferrer" target="_blank"&gt;&lt;STRONG&gt;DispatchGroup&lt;/STRONG&gt;&lt;/A&gt;. Create a group. Call &lt;STRONG&gt;enter()&lt;/STRONG&gt; before you make&amp;nbsp;each &lt;STRONG&gt;identifyLayer&lt;/STRONG&gt; call and &lt;STRONG&gt;leave()&lt;/STRONG&gt; when each call returns. Then you&amp;nbsp;can use &lt;STRONG&gt;notify()&lt;/STRONG&gt; to execute a block when all the identifies have completed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Call something like this (I haven't tested it!) from the &lt;STRONG&gt;AGSGeoViewTouchDelegate&lt;/STRONG&gt; method:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;guard &lt;SPAN class="keyword token"&gt;let&lt;/SPAN&gt; operationalLayers &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; mapView&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;map&lt;SPAN class="operator token"&gt;?&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;operationalLayers &lt;SPAN class="keyword token"&gt;as&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;?&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;AGSLayer&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;let&lt;/SPAN&gt; identifyGroup &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;DispatchGroup&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;var&lt;/SPAN&gt; identifyResults&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;AGSIdentifyLayerResult&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;// Here we identify on all the identifiable layers.&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; layer &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; operationalLayers where layer&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;isIdentifyEnabled &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    identifyGroup&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;enter&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    mapView&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;identifyLayer&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;layer&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; screenPoint&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; screenPoint&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; tolerance&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;20&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; returnPopupsOnly&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;false&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;result&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt;
        defer &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt; identifyGroup&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;leave&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

        guard result&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;error &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; nil &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
            &lt;SPAN class="token function"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Error identifying on layer \(result.layerContent.name): \(result.error!)"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt;
        &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
        
        identifyResults&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;append&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;result&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;// I've put this on the main queue assuming you want to update the UI.&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// But if you need to do heavy processing on the identify results, consider using&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// .global(qos: .userInitiated) instead and only dispatching back to main&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// with DispatchQueue.main.async {} when you're ready to update the UI.&lt;/SPAN&gt;
identifyGroup&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;notify&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;queue&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;main&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; result &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; identifyResults &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="comment token"&gt;// Handle the identify results.&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note that if you call the above code from some non-main thread (unlikely), you'll need to &lt;A href="https://stackoverflow.com/a/28976644/1416253" rel="nofollow noopener noreferrer" target="_blank"&gt;coordinate writing&lt;/A&gt; to the &lt;STRONG&gt;identifyResults&lt;/STRONG&gt; array to be thread-safe.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 20:11:20 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4751#M46</guid>
      <dc:creator>Nicholas-Furness</dc:creator>
      <dc:date>2021-12-10T20:11:20Z</dc:date>
    </item>
    <item>
      <title>Re: Slow/Laggy performance when doing map identify with web imagery basemap</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4752#M47</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Have there been any updates to this in newer versions of the runtime SDK? &amp;nbsp;I'm still noticing lag when doing map identifies with imagery basemaps. &amp;nbsp;No lag at all with other vector or tile basemaps. &amp;nbsp;Only the imagery basemap and imagery/w labels basemap.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Sep 2020 01:39:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-ios-questions/slow-laggy-performance-when-doing-map-identify/m-p/4752#M47</guid>
      <dc:creator>MichaelDavis3</dc:creator>
      <dc:date>2020-09-09T01:39:39Z</dc:date>
    </item>
  </channel>
</rss>

