Changes between Initial Version and Version 1 of Ticket #2099


Ignore:
Timestamp:
Aug 22, 2012, 10:17:05 PM (12 years ago)
Author:
jng
Comment:

Implemented an in-memory cache for resource content to avoid disk reads for every GetResourceContent() call. However this does not significantly reduce the I/O read count in the Task Manager.

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #2099 – Description

    initial v1  
    11If you look at any process using mg-desktop in the Task Manager, chances are the "I/O Read Bytes" column will be through the roof.
    22
    3 The explanation is simple, the mg-desktop implementation of MgResourceService is a simple wrapper around the file system, so every GetResourceContent() call (and Maestro does a lot of this) is a call to read a file from disk. Such calls add up real quick.
     3The explanation is simple, the mg-desktop implementation of MgResourceService is a simple wrapper around the file system, so every GetResourceContent() call (and Maestro does a lot of this) is a call to read a file from disk.
    44
    5 The solution would be to have an in-memory cache of resource content, such that subsequent calls to GetResourceContent() on the same resource id returns a MgByteReader from a cached copy of the resource content. Subsequently, calls to SetResource() will flush existing entries out and update the cached entry.
     5The other explanation can be found by running an mg-desktop application through Process Monitor, which shows the main culprits being:
     6
     7 * Excessive ReadFile calls on CS-Map Dictionaries
     8 * Excessive ReadFile/QueryStandardInformationFile/QueryDirectory calls on Access.log
     9
     10Part of the solution would be to have an in-memory cache of resource content, such that subsequent calls to GetResourceContent() on the same resource id returns a MgByteReader from a cached copy of the resource content. Subsequently, calls to SetResource() will flush existing entries out and update the cached entry.
     11
     12We also need to review the use of MgCoordinateSystem* classes in mg-desktop and the ported Log Manager code to see where we're doing things different from MapGuide Server (that does not have these high I/O read numbers)