diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index fdeea1852d..a92c4fb96a 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs @@ -74,6 +74,9 @@ namespace OpenSim.Services.Connectors.SimianGrid // private object m_gestureSyncRoot = new object(); private bool m_Enabled = false; + private const double CACHE_EXPIRATION_SECONDS = 20.0; + private static ExpiringCache m_ItemCache; + #region ISharedRegionModule public Type ReplaceableInterface { get { return null; } } @@ -99,6 +102,9 @@ namespace OpenSim.Services.Connectors.SimianGrid url = url + '/'; m_serverUrl = url; + if (m_ItemCache == null) + m_ItemCache = new ExpiringCache(); + } public void Initialise(IConfigSource source) @@ -132,6 +138,8 @@ namespace OpenSim.Services.Connectors.SimianGrid { m_userServerUrl = serviceUrl; m_Enabled = true; + if (m_ItemCache == null) + m_ItemCache = new ExpiringCache(); } } } @@ -271,6 +279,10 @@ namespace OpenSim.Services.Connectors.SimianGrid /// public InventoryItemBase GetItem(InventoryItemBase item) { + InventoryItemBase retrieved = null; + if (m_ItemCache.TryGetValue(item.ID, out retrieved)) + return retrieved; + NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, @@ -292,7 +304,11 @@ namespace OpenSim.Services.Connectors.SimianGrid for (int i = 0; i < items.Count; i++) { if (items[i].ID == item.ID) - return items[i]; + { + retrieved = items[i]; + m_ItemCache.AddOrUpdate(item.ID, retrieved, CACHE_EXPIRATION_SECONDS); + return retrieved; + } } } }