AppFabric Cache内存非常密集

问题:我做错了吗? 配置设置不正确? AppFabric的内存使用量是否低于正常值?

问题:我正在从SQL数据库表中读取数据到AppFabric缓存中。 似乎AppFabric为一个相当小的对象使用了大量内存,我无法理解为什么(我最近开始使用ApppFabric – 所以我是一个菜鸟)

说明:在AppFabric缓存中,大约60MB的SQL表一次转换为大约800MB。

细节:

表I打算加载的SQL数据大小:

SQL数据大小

App Fabric空闲内存使用情况:

AppFabric闲置使用情况

服务器配置:

   

客户端配置:

    

C#代码:

 public static void ReadPortedNumbers() { MobileDataContext mdc = null; List col; try { mdc = new MobileDataContext(strConnString); col = (from RN in mdc.tblRoutedNumbers select Convert(RN)).ToList(); var CacheFactory = new DataCacheFactory(); var myCache = CacheFactory.GetCache("MobileCache"); myCache.Put("PortedNumberCollection", col); } catch (Exception E) { throw new System.Exception(E.GetType().ToString() + " in BG.Mobile.DAL.ReadPortedNumbers, Message : " + E.Message, E); } finally { if (mdc != null) mdc.Dispose(); } } public static PortedNumberCollection Convert(tblRoutedNumber DataClass) { try { PortedNumberCollection BusinessClass = new PortedNumberCollection(); BusinessClass.PortedID = DataClass.PortedID; BusinessClass.MSISDN = DataClass.MSISDN; BusinessClass.RoutingLabel = DataClass.RoutingLabel; BusinessClass.RouteAction = DataClass.RouteAction; return BusinessClass; } catch (Exception E) { throw new System.Exception(E.GetType().ToString() + " in BG.Bus.Mobile.DALConvertor.Convert(tblRoutedNumber DataClass): " + E.Message); } } [DataContract][Serializable] public class PortedNumberCollection { [DataMember] public Int64 PortedID; [DataMember] public string MSISDN; [DataMember] public string RoutingLabel; [DataMember] public string RouteAction; } 

加载(放置)数据后的AppFabric内存使用情况加载数据后的AppFabric内存使用量(put)

如果您正在使用AppFabric 1.1,您需要知道它的内部GC不会释放任何已分配的内存。 因此,如果您确定要使用的内存量或启用了LRU,则可以限制CacheCluster主机的内存(例如, SET-CacheHostConfig -HostName ServerName -CachePort PORT -CacheSize 1024 )。 这将确保您的内存使用率不超过该级别。 重要的是要明白它将不可避免地蔓延到这个水平。

我想回答我自己的问题,以便将来阅读此内容的用户。

不要使用AppFabric而是看看像Redis或MemCached这样的产品。 他们在各方面都看得更好。

AppFabric在我的生产系统中仍然存在太多问题。