小编Pet*_*rks的帖子

如何清除System.Runtime.Caching.MemoryCache

我使用a System.Runtime.Caching.MemoryCache来保存永不过期的物品.但是,有时我需要能够清除整个缓存.我怎么做?

在这里问了一个类似的问题,我是否可以枚举缓存,但这是一个坏主意,因为它需要在枚举期间进行同步.

我尝试过使用.Trim(100)但根本不起作用.

我已经尝试通过Linq获取所有密钥的列表,但后来我回到了我开始的地方,因为一个接一个地逐出项目很容易导致竞争条件.

我想存储所有的密钥,然后.Remove(key)为每个密钥发出一个,但是那里也有一个隐含的竞争条件,所以我需要锁定对密钥列表的访问,然后事情再次变得混乱.

然后我认为我应该可以调用.Dispose()整个缓存,但我不确定这是否是最佳方法,因为它的实现方式.

使用ChangeMonitors不是我的设计的选项,并且对于这样一个微不足道的要求是不必要的.

那么,我该如何彻底清除缓存呢?

c# asp.net caching .net-4.0

38
推荐指数
4
解决办法
4万
查看次数

我可以迭代.NET4 MemoryCache吗?

我正在使用提供的缓存System.Runtime.Caching.MemoryCache.

我想枚举缓存的项目,以便我可以无效(逐出然后重新加载)项目

foreach (var item in MemoryCache.Default) { item.invalidate() }
Run Code Online (Sandbox Code Playgroud)

这里发现的官方文件说:

!重要:检索MemoryCache实例的枚举器是一项资源密集型和阻塞操作.因此,不应在生产应用程序中使用枚举器.

当然必须有一种简单有效的方法来迭代缓存的项目?

c# asp.net caching .net-4.0

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

如果Object.prototype被修改,如何测试对象是否为"isEmpty()"?

我想测试一个对象是否为空:{}.通常使用以下内容:

function isEmpty(obj) {
  for (var prop in obj) {
    if (obj.hasOwnProperty(prop))
      return false;
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)

但是假设Object原型被添加到如下:

Object.prototype.Foo = "bar";
Run Code Online (Sandbox Code Playgroud)

测试:

alert(isEmpty({}));              // true
Object.prototype.Foo = "bar";
alert({}.Foo);                   // "bar" oh no...
alert(isEmpty({}));              // true  ...**huh?!**
Run Code Online (Sandbox Code Playgroud)

我试图核对对象的原型,改变它的构造函数,以及各种类型的黑客攻击.什么都没有用,但也许我做错了(很可能).

javascript inheritance prototypal-inheritance

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

我可以在声明性帮助器中拥有私有函数或私有声明性帮助器吗?

可能重复:
在Razor ASP.Net MVC3中使用另一个View中的@helpers

我的环境:使用Razor的ASP.NET MVC3.

我在App_Data目录中的声明性帮助器中有一些可重用的视图逻辑,它们被定义为@helper bar() { /* markup */ }并且对于要使用的任何视图都是公共的.

此外,在常规Razor视图中,我可以编写"私人"助手:

@functions {
  public IHtmlString foo() { return new MvcHtmlString("foo"); }
}
Run Code Online (Sandbox Code Playgroud)

我希望在我的声明性助手中有"私有"函数,或者,我希望在我的声明性助手文件中有"私有"声明性助手.另一种方法是编写常规的辅助类 - 但在这种情况下我更喜欢标记,因为它更简洁,更易于维护.

你为什么要这样做?你有一个观点,你想要引入一些标记; 这是通过引用声明性帮助程序完成的.但该DH是一个文件,其中包含使用常见标记的其他DH.因此,您希望将所有共性转移到一个位置:一个"私有"声明函数/帮助程序,只有该文件中的DH才能看到.

c# asp.net-mvc razor razor-declarative-helpers asp.net-mvc-3

5
推荐指数
0
解决办法
140
查看次数

c #destructors:处置"模式"和最佳实践

我知道c#中析构函数和终结符的含义和用法的不同.

但是,通常"我应该......"的回答是"不使用析构函数,而是使用MSDN中所示的dispose模式".埃里克利珀写道相当强烈反对使用析构函数不必要的.

但是,这种"模式"主张像这样编写析构函数~T() { Dispose(false); }.陈述的原因是它是一个"后备",在程序员忘记打电话的情况下调用Dispose().当然,这忽略了这样一个事实,即终结者在他们的行动中是不确定的,甚至可能永远不会运行.

因此:

  1. 如果我使用处理模式,我还应该提供析构函数吗?顺便说一下,我只处理托管资源(DataContext例如实体框架).

  2. 如果我提供了一个析构函数:如果我的类派生自一个IDisposable可能已经提供了析构函数的类,那么我是否应该提供一个析构函数呢?我认为在这种情况下永远不会写析构函数,但是文档说它无论如何都会自动调用基类的析构函数.

c# dispose destructor

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