mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 01:06:30 +08:00
flotsam cache: reduce number of calls to File.SetLastAccessTime, (if that option is enabled )
This commit is contained in:
@@ -115,6 +115,8 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||
private readonly object weakAssetReferencesLock = new object();
|
||||
private bool m_updateFileTimeOnCacheHit = false;
|
||||
|
||||
private static ExpiringKey<string> m_lastFileAccessTimeChange = null;
|
||||
|
||||
public FlotsamAssetCache()
|
||||
{
|
||||
List<char> invalidChars = new List<char>();
|
||||
@@ -183,6 +185,9 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||
m_CacheWarnAt = assetConfig.GetInt("CacheWarnAt", m_CacheWarnAt);
|
||||
}
|
||||
|
||||
if(m_updateFileTimeOnCacheHit)
|
||||
m_lastFileAccessTimeChange = new ExpiringKey<string>(300000);
|
||||
|
||||
if(m_MemoryCacheEnabled)
|
||||
m_MemoryCache = new ExpiringCacheOS<string, AssetBase>((int)m_MemoryExpiration * 500);
|
||||
|
||||
@@ -430,11 +435,12 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||
/// </summary>
|
||||
/// <param name="filename">Filename.</param>
|
||||
/// <returns><c>true</c>, if the update was successful, false otherwise.</returns>
|
||||
private static bool UpdateFileLastAccessTime(string filename)
|
||||
private static bool CheckUpdateFileLastAccessTime(string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.SetLastAccessTime(filename, DateTime.Now);
|
||||
m_lastFileAccessTimeChange.Add(filename, 900000);
|
||||
return true;
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
@@ -447,6 +453,21 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateFileLastAccessTime(string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
if(!m_lastFileAccessTimeChange.ContainsKey(filename))
|
||||
{
|
||||
File.SetLastAccessTime(filename, DateTime.Now);
|
||||
m_lastFileAccessTimeChange.Add(filename, 900000);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private AssetBase GetFromWeakReference(string id)
|
||||
{
|
||||
AssetBase asset = null;
|
||||
@@ -974,6 +995,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||
bformatter.Serialize(stream, asset);
|
||||
stream.Flush();
|
||||
}
|
||||
m_lastFileAccessTimeChange.Add(filename, 900000);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
@@ -1096,7 +1118,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||
break;
|
||||
|
||||
string idstr = id.ToString();
|
||||
if (!UpdateFileLastAccessTime(GetFileName(idstr)) && tryGetUncached)
|
||||
if (tryGetUncached && !CheckUpdateFileLastAccessTime(GetFileName(idstr)))
|
||||
{
|
||||
cooldown += 5;
|
||||
m_AssetService.Get(idstr);
|
||||
|
||||
Reference in New Issue
Block a user