Geocoding performance has always been a top priority when working with large volumes of addresses, and it’s a primary consideration when designing and implementing a geocoding workflow. There are several factors that contribute to geocoding performance, I won’t cover all of these in this article but, let’s look at some simple, high value changes we can make to our locators and workflow to improve performance.
Increasing the run time memory limit:
ArcGIS Locators can be configured to use more system memory. Using system memory (RAM) to work with locators is much faster than reading a locator from disk. ArcGIS supports use of 2GB memory on a 32 bit system and 3GB of memory on a 64 bit system. By default ArcGIS locators are configured to use 512MB of system memory. The default values were chosen to ensure the greatest possible system coverage, without exceeding system limits and possibly destabilizing a system. By increasing the memory allocation for locator use above 512MB we see good performance gains.
ArcGIS locators support a “Run Time Memory Limit” parameter. For large geocoding jobs working against a large locator such as US streets, or US Composite, we’ll want to set this limit near the capabilities of our system. With ArcGIS 10, geocoding performance continues improving as the cache grows beyond 2GB.
Follow the steps below to create or edit an existing Run Time Memory Limit parameter:
- Open the *.loc file in a text editor (note this is the .loc file and not the .loc.xml file).
- Look for the line that starts with RuntimeMemoryLimit =
- If the value does not exist, create one and change the value to represent the number of bytes of system memory you want to allocate for the locator:
RuntimeMemoryLimit = 2048000000 - Save the locator.
- Use the locator and compare performance and system memory use.
You can play with this value to find something that is appropriate for your system. In most cases you will see optimum performance near 2GB of memory. If you’ve allocated too much memory, the system may become unstable or ArcGIS may crash. Reduce the memory allocation to rectify.
Presort reference data for optimal performance:
It’s always much faster to find something when it is organized than when it is chaotic. Geocoding is no different. Sorted addresses can be geocoded faster than unsorted data. Sorted addresses tax the system less, hard disks don’t have to work so hard and the geocoding engine makes less frequent memory allocations.
A typical approach for sorting data would be to sort by the highest level of geography first and then to sort on smaller levels of geography. With a U.S. address for example, you should sort the address data by State, followed by City, and Postal Code. If your data isn’t already sorted, you can sort it using the ArcGIS Sort (Data Management) tool or you can configure a locator to sort data as it’s read into the geocoding process.
Configuring a locator for sorting is similar to changing the run time memory limit, except you need to configure two parameters instead of one. The first parameter specifies the fields to sort by. These fields are the input fields defined by the locator. The second parameter is the number of records to sort in each process. You could sort the entire table, but that would be very memory and CPU intensive so instead you can choose to sort the first n number of records. Defining a higher value can help produce higher performance but again, taxes system resources. A typical value supporting good performance might be 100000 records.
Follow the steps below to create or edit an existing Batch Presort parameter:
- Open the *.loc file in a text editor (note this is the .loc file and not the .loc.xml file) .
- Look for the line that starts with BatchPresortInputs = State
- If the value does not exist, create one and assign the first locator input field to sort by. Repeat the entry for additional fields
BatchPresortInputs = State
BatchPresortInputs = City
BatchPresortInputs = Zip - Look for the line that starts with BatchPresortCacheSize =
- If the value does not exist, create one and assign the first locator input field to sort by. Repeat the entry for additional fields
BatchPresortCacheSize = 100000 - Save the locator.
- Use the locator and compare performance and system memory use.
In this example I geocoded 10,000 unsorted U.S. addresses with a U.S. streets locator and the preceding enhancements. Performance increased from 350,000 recs/hr to 614,000 recs/hr. You can experiment with the batch presort cache size to find optimal performance for your locators and data.
In the future we’ll look at more ways to increase geocoding performance, but these techniques are a good start and should result in some excellent results.
Jeff

Hi there Jeff,
For the case where the address locator is contained within a file geodatabase, there is no *.loc file accompanying the address locator, as the (as per : http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00250000003v000000.htm
)
How does a user go about making the RuntimeMemoryLimit setting for a locator stored in a file geodatabase?
-The only thing I could find that might come close to this is specification of the CONFIG
parameter which is the 5th parameter, used when the locator is created. – But what I read about the CONFIG parameter is that it is indicating the expected size of the dataset that is being stored in the file geodatabase. – Which is not exactly how you explain the RuntimeMemoryLimit value is used.
I am asking this for a client that I am working with, they are working in a 9.3.1. environment at this stage.
Thanks for your clarification on this one,
Allison
ESRI Australia
Jeff,
I’m a little confused about your steps 4 and 5. Should my locator look like this?
BatchPresortInputs = State
BatchPresortCacheSize = 100000
BatchPresortInputs = ZIP
BatchPresortCacheSize = 100000
BatchPresortInputs = City
BatchPresortCacheSize = 100000
If not could you clarify.
Scott B
Jeff,
I did some testing of this using the “Street_Addresses_US” locator file that came with the ArcMap10 Maps and Data kit, and I have found that unless you go into the .loc.xml file and change the “RuntimeMemoryLimit” setting, changing the .loc file alone will not have an effect.
Andrew