public static Map AllocateMapInstance(int mapId) { Map result; if (MapMgr._mapInstancePool.ContainsKey(mapId)) { Map source = MapMgr.FindMap(mapId); Map map = null; MapMgr.m_lock.AcquireWriterLock(-1); try { if (MapMgr._mapInstancePool[mapId].Count > 0) { map = MapMgr._mapInstancePool[mapId].Dequeue(); } } catch { } finally { MapMgr.m_lock.ReleaseWriterLock(); } if (map == null) { result = source.Clone(); } else { map.CopyData(source); result = map; } } else { result = null; } return(result); }