标签: memorycache

在AppHarbor上模拟后台任务

我正在使用System.Runtime.Caching.MemoryCache来模拟在AppHarbor上部署的正在运行的.NET MVC应用程序上的重复任务.

在高速缓存条目被使用含有一个AbsoluteExpiration偏移CacheItemPolicy和调用的方法和重新触发的项目的增加在高速缓存中(如所描述的一个RemovedCallback加入此处)

MemoryCache首次在Application_Start中填充.它在本地工作正常,但在AppHarbor上部署后似乎无法工作(也尝试使用HttpRuntime.Cache,结果相同).

我的应用程序在AppHarbor上的CANOE(免费)帐户下运行,该帐户只有一个工作人员.这是否意味着在升级到付费计划之前我无法模拟后台任务?

谢谢!

memorycache appharbor

6
推荐指数
1
解决办法
524
查看次数

ASP.NET MVC和MemoryCache - 我如何使用它?

我在我的Application_Start中有这个:

var crumbsCache = new MemoryCache("breadCrumbsNames");
var crumbsList = new List<CacheItem>
                    {
                        //list of new CacheItem();
                    };
foreach (var cacheItem in crumbsList)
{
    crumbsCache.Add(cacheItem, new CacheItemPolicy());
}
Run Code Online (Sandbox Code Playgroud)

现在,在我的控制器中,我这样做:

var cache = new MemoryCache("breadCrumbsNames");
var cacheItem = cache.GetCacheItem("nameOfCacheItem");
Run Code Online (Sandbox Code Playgroud)

但是然后cacheItem总是为null,我做错了什么?

c# asp.net asp.net-mvc memorycache

6
推荐指数
2
解决办法
8947
查看次数

web api中的内存缓存

我正在寻找我的web api中的缓存,我可以使用一个api方法的输出(在12小时内更改一次)进行后续调用,然后我在SO上找到了这个解决方案,但是我很难理解并使用下面的代码

private IEnumerable<TEntity> GetFromCache<TEntity>(string key, Func<IEnumerable<TEntity>> valueFactory) where TEntity : class 
{
    ObjectCache cache = MemoryCache.Default;
    var newValue = new Lazy<IEnumerable<TEntity>>(valueFactory);            
    CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(30) };
    //The line below returns existing item or adds the new value if it doesn't exist
    var value = cache.AddOrGetExisting(key, newValue, policy) as Lazy<IEnumerable<TEntity>>;
    return (value ?? newValue).Value; // Lazy<T> handles the locking itself
}
Run Code Online (Sandbox Code Playgroud)

我不确定如何在下面的上下文中调用和使用此方法? 我有一个方法Get

  public IEnumerable<Employee> Get()
    {
        return repository.GetEmployees().OrderBy(c => c.EmpId); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc memorycache asp.net-web-api asp.net-web-api2

6
推荐指数
1
解决办法
6381
查看次数

滑动缓存内存中的屏幕图像

我想只在内存中加载和缓存图像,而不是将它们传递给视图,稍后当我需要将它们加载到UI上时,如果它们存在于内存中,则从内存缓存中获取它们.

我试过了:

Glide.with().load(uri).into(new SimpleTarget<GlideDrawable>(WIDTH,HEIGHT) 
{
     @Override
     public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
    //left empty
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

但是当我稍后调用在ImageView中加载uri时,它仍然会从路径加载它而不是内存.

是否有另一种方法可以将图像缓存在内存中而无需在UI上加载它们?

android caching memorycache android-glide

6
推荐指数
1
解决办法
5155
查看次数

有没有办法从IComparer派生IEqualityComparer?

TL; DR我正在寻找一种方式来获得IEqualityComparer<T>IComparer<T>,无论哪个数据类型是T,包括在不区分大小写的选项Tstring.或者我需要针对此问题的不同解决方案.

以下是完整的故事:我正在使用LFU策略实现简单的通用缓存.要求是必须能够选择缓存是区分大小写还是不区分大小写 - 如果string恰好是缓存键的数据类型(这不是必需的).在解决方案中,我主要开发缓存,我期望数百亿的缓存查找,以及最多100,000个条目的缓存大小.由于这些数字,我立即停止使用导致分配的任何字符串操作(例如.ToLower().GetHashCode()等),而是选择使用IComparerIEqualityComparer,因为它们是标准的BCL功能.此缓存的用户可以将比较器传递给构造函数.以下是代码的相关片段:

public class LFUCache<TKey,TValue>
{
    private readonly Dictionary<TKey,CacheItem> entries;
    private readonly SortedSet<CacheItem> lfuList;

    private class CacheItem
    {
        public TKey Key;
        public TValue Value;
        public int UseCount;
    }

    private class CacheItemComparer : IComparer<CacheItem>
    {
        private readonly IComparer<TKey> cacheKeyComparer;

        public CacheItemComparer(IComparer<TKey> cacheKeyComparer)
        {
            this.cacheKeyComparer = cacheKeyComparer;
            if (cacheKeyComparer == null)
                this.cacheKeyComparer = Comparer<TKey>.Default;
        }

        public int Compare(CacheItem x, CacheItem y) …
Run Code Online (Sandbox Code Playgroud)

c# icomparer iequalitycomparer memorycache

6
推荐指数
2
解决办法
861
查看次数

获取使用MemoryCache类c#缓存的所有缓存对象

我想检索使用MemoryCache添加的所有缓存对象.

我尝试了以下但它没有检索它们

System.Web.HttpContext.Current.Cache.GetEnumerator(); System.Web.HttpRuntime.Cache.GetEnumerator();

注意:Retreive all不仅仅意味着我所知道和创建的,我的意思是在应用程序中创建的每个缓存对象.

.net c# asp.net asp.net-mvc memorycache

6
推荐指数
3
解决办法
9676
查看次数

确切地说,MemoryCache的内存限制是什么意思?

System.Runtime.Caching.MemoryCache是.NET Framework(版本4+)中的一个类,它使用字符串作为键来缓存内存中的对象.除了System.Collections.Generic.Dictionary <string,object>之外,这个类还有各种各样的铃声和口哨声,可以让你配置缓存增长到多少(绝对或相对术语),设置不同的过期策略不同的缓存项目,以及更多.

我的问题与记忆限制有关.MSDN上的所有文档似乎都没有令人满意地解释这一点,并且Reference Source上的代码相当不透明.很抱歉将所有这些都写成一个"问题",但我无法弄清楚如何将一些问题纳入他们自己的问题,因为他们只是对一个整体问题的不同观点:"你如何调和惯用的C# /.NET有一个通常有用的内存缓存的概念,它有可配置的内存限制几乎完全在托管代码中实现?"

  1. 密钥大小是否计入MemoryCache占用的空间?实习池中的键怎么样,每个键应该只添加对象引用的大小到缓存的大小?
  2. 在确定池中存储的对象的大小时,MemoryCache是​​否考虑的不仅仅是它存储的对象引用的大小? 我的意思是......它必须,对吗?否则,配置选项对于常见情况极具误导性......对于其余问题,我将假设它确实如此.
  3. 鉴于MemoryCache几乎肯定会考虑超过缓存中存储的值的对象引用的大小,它有多深?
    1. 如果我实现这样的事情,我会觉得困难的考虑单个对象的"子"成员的内存使用情况,也没有拉动"父"的参考性.
    2. 例如,想象一下游戏应用程序中的一个类,Player. Player有一些特定于玩家的状态被封装在一个public PlayerStateData PlayerState { get; }属性中,该属性封装了玩家正在看的方向,他们持有的链轮数等等,以及对整个游戏状态的引用public GameStateData GameState { get; },可以用来回到游戏(更大)状态来自只知道玩家的方法.
    3. MemoryCache是​​否考虑两者PlayerState以及GameState何时考虑缓存贡献的大小?
    4. 也许它更像是" 直接存储在缓存中的对象所占用的托管堆上的大小,以及通过这些对象的成员可以访问的所有东西"?
    5. GameState仅仅因为5个玩家被缓存而将大小的贡献大小乘以5 是愚蠢的......但是再一次,一个可能的实现可能就是这样,并且很难计算PlayerState而不计算GameState.
  4. 如果一个对象在MemoryCache中多次存储,那么每个条目是否分别计入限制?
  5. 与前一个相关,如果一个对象直接存储在MemoryCache中,而且间接存储在另一个对象的成员中,那么它们对内存限制有什么影响?
  6. 如果一个对象存储在MemoryCache中,但也被一些完全与MemoryCache断开连接的其他活动对象引用,哪些对象计入内存限制?如果它是一个对象数组,有些(但不是全部)有传入的外部引用呢?

我自己的研究使我SRef.cs,我放弃了在试图让后了解这里,后来导致这里.猜测所有这些问题的答案将围绕寻找和冥想最终填充存储在该句柄中的INT64的代码.

.net c# caching memorycache

6
推荐指数
1
解决办法
691
查看次数

如何检查MemoryCache中的项目何时到期?

是否可以读取MemoryCache中项目的到期时间?

System.Runtime.Caching.MemoryCache在我从数据库重新加载之前,我使用.NET 将配置信息存储30分钟.作为状态页面的一部分,我想显示特定缓存项目的年龄或它何时到期.

object config = LoadSomeStuffFromDatabase();
CacheItemPolicy cachePolicy = new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddMinutes(30) }; 
Cache.Add("MyConfigKey", config, cachePolicy);

// And now I want to do something like this :-)
DateTime dt = Cache.SomeMagicMethod("MyConfigKey");
Run Code Online (Sandbox Code Playgroud)

今天我正在使用每次重新加载配置时更新的变量.但是从缓存本身读取这些信息会更好.

c# caching memorycache

6
推荐指数
1
解决办法
1万
查看次数

如何在.Net Core ActionFilterAttribute中使用依赖注入?

AuthenticationRequiredAttribute类

public class AuthenticationRequiredAttribute : ActionFilterAttribute
{
    ILoginTokenKeyApi _loginTokenKeyApi;
    IMemoryCache _memoryCache;

    public AuthenticationRequiredAttribute(IMemoryCache memoryCache)
    {
        _memoryCache = memoryCache;

        _loginTokenKeyApi = new LoginTokenKeyController(new UnitOfWork());
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var memory = _memoryCache.Get(Constants.KEYNAME_FOR_AUTHENTICATED_PAGES);

        string requestedPath = filterContext.HttpContext.Request.Path;

        string tokenKey = filterContext.HttpContext.Session.GetString("TokenKey")?.ToString();

        bool? isLoggedIn = _loginTokenKeyApi.IsLoggedInByTokenKey(tokenKey).Data;

        if (isLoggedIn == null ||
            !((bool)isLoggedIn) ||
            !Constants.AUTHENTICATED_PAGES_FOR_NORMAL_USERS.Contains(requestedPath))
        {
            filterContext.Result = new JsonResult(new { HttpStatusCode.Unauthorized });
        }
    }
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

HomeController的

public class HomeController : Controller
{
    IUserApi …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net memorycache asp.net-core

6
推荐指数
2
解决办法
4852
查看次数

.NET Core 中的多个 MemoryCache 实例

我们需要使用 MemoryCache 缓存两种类型的数据。

  1. 安全令牌
  2. 书(例如)

我们不想在安全令牌缓存上设置 SizeLimit,因为这意味着缓存中的每个条目都需要根据.NET Core doco指定大小。这是因为安全令牌是由我们无法控制的已编译 nuget 类型插入的。

因此,创建另一个 MemoryCache 实例来仅保存 Book 项目是有意义的,这样我们就可以在向缓存添加书籍时设置项目的大小限制和大小。

此外,.NET Core 文档建议开发人员需要管理缓存的限制。

我在这里这里读过相互冲突的帖子,它们支持/拒绝多个内存缓存实例。此外,这些与 .NET 有关,与 .NET Core 无关。

由于 .NET Core 的 MemoryCache 需要开发人员管理缓存项的逐出,并且考虑到缓存中的书籍比令牌多得多,因此我们倾向于拥有 2 个 MemoryCache 实例。

  1. 安全令牌 - 没有任何大小限制,在已编译的 nuget 包中具有设置器
  2. 书籍 - 有大小限制,因为所有设置器都在项目代码内

在 .NET Core Web 应用程序中使用多个 MemoryCache 实例是否可能会遇到任何问题?

我们使用.NET Core 2.1Microsoft.Extensions.Caching.Memory v=2.1.2.0

c# caching memorycache .net-core asp.net-core-2.1

6
推荐指数
0
解决办法
1481
查看次数