AppFabric Cache内存非常密集
问题:我做错了吗? 配置设置不正确? AppFabric的内存使用量是否低于正常值?
问题:我正在从SQL数据库表中读取数据到AppFabric缓存中。 似乎AppFabric为一个相当小的对象使用了大量内存,我无法理解为什么(我最近开始使用ApppFabric – 所以我是一个菜鸟)
说明:在AppFabric缓存中,大约60MB的SQL表一次转换为大约800MB。
细节:
表I打算加载的SQL数据大小:
App Fabric空闲内存使用情况:
服务器配置:
客户端配置:
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 1.1,您需要知道它的内部GC不会释放任何已分配的内存。 因此,如果您确定要使用的内存量或启用了LRU,则可以限制CacheCluster主机的内存(例如, SET-CacheHostConfig -HostName ServerName -CachePort PORT -CacheSize 1024
)。 这将确保您的内存使用率不超过该级别。 重要的是要明白它将不可避免地蔓延到这个水平。
我想回答我自己的问题,以便将来阅读此内容的用户。
不要使用AppFabric而是看看像Redis或MemCached这样的产品。 他们在各方面都看得更好。
AppFabric在我的生产系统中仍然存在太多问题。