次のコードを使用して、各州の項目を Appfabric キャッシュに追加します。
GetObjectsInRegion メソッドを使用して、キャッシュから州リストを取得します。
ただし、120 レコードの場合、SQL サーバーよりも非常に低速です。
Appfabric では 3000 ミリ秒以上かかり、SQL サーバーでは約 30 ミリ秒かかります。
理由とは?
私を助けてください!!!!
try
{
using (CacheEntities context = new CacheEntities())
{
if (force)
{
Cache.RemoveRegion(ObjectName);
}
if (Cache.CreateRegion(ObjectName))
{
List<Province> province = (from t in context.Province select t).ToList<Province>();
if (province != null && province.Count() > 0)
{
foreach (Province provinceItem in province)
{
CommonFunctions.Add(ObjectName, provinceItem.ProvinceID, provinceItem);
totalItemsCached++;
}
}
}
}
}
catch (Exception ex)
{
CommonFunctions.ErrorInfo(ObjectName, ex);
}
編集:コメントからのキャッシュ取得コード:
using System.Collections.Generic;
using System.Threading.Tasks;
public class Sample
{
public List<object> GetListObjectsInRegion(string region)
{
var cache = GetCache();
IEnumerable<KeyValuePair<string, object>> rawResult =
cache.GetObjectsInRegion(region);
List<object> result = new List<object>();
Parallel.ForEach(rawResult, rawResultItem =>
{ result.Add(rawResultItem.Value); });
return result;
}
}
更新: これは GetCache 関数のコードです
private static DataCacheFactory _factory;
private static DataCache _cache;
private static DataCache GetCache()
{
if (_cache != null) return _cache;
DataCacheFactoryConfiguration configuration = new DataCacheFactoryConfiguration();
configuration.IsCompressionEnabled = true;
_factory = new DataCacheFactory(configuration);
_cache = _factory.GetCache("default");
return _cache;
}
更新: これは appfabric 構成です
</configSections>
<dataCacheClient>
<localCache isEnabled="true" sync="TimeoutBased" objectCount="1000" ttlValue="600" />
<hosts>
<host name="localhost" cachePort="22233" />
</hosts>
</dataCacheClient>