我使用a System.Runtime.Caching.MemoryCache
来保存永不过期的物品.但是,有时我需要能够清除整个缓存.我怎么做?
我在这里问了一个类似的问题,我是否可以枚举缓存,但这是一个坏主意,因为它需要在枚举期间进行同步.
我尝试过使用.Trim(100)
但根本不起作用.
我已经尝试通过Linq获取所有密钥的列表,但后来我回到了我开始的地方,因为一个接一个地逐出项目很容易导致竞争条件.
我想存储所有的密钥,然后.Remove(key)
为每个密钥发出一个,但是那里也有一个隐含的竞争条件,所以我需要锁定对密钥列表的访问,然后事情再次变得混乱.
然后我认为我应该可以调用.Dispose()
整个缓存,但我不确定这是否是最佳方法,因为它的实现方式.
使用ChangeMonitors
不是我的设计的选项,并且对于这样一个微不足道的要求是不必要的.
那么,我该如何彻底清除缓存呢?
我正在使用提供的缓存System.Runtime.Caching.MemoryCache
.
我想枚举缓存的项目,以便我可以无效(逐出然后重新加载)项目
foreach (var item in MemoryCache.Default) { item.invalidate() }
Run Code Online (Sandbox Code Playgroud)
但这里发现的官方文件说:
!重要:检索MemoryCache实例的枚举器是一项资源密集型和阻塞操作.因此,不应在生产应用程序中使用枚举器.
当然必须有一种简单有效的方法来迭代缓存的项目?
我想测试一个对象是否为空:{}
.通常使用以下内容:
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)
我试图核对对象的原型,改变它的构造函数,以及各种类型的黑客攻击.什么都没有用,但也许我做错了(很可能).
我的环境:使用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
我知道c#中析构函数和终结符的含义和用法的不同.
但是,通常"我应该......"的回答是"不使用析构函数,而是使用MSDN中所示的dispose模式".埃里克利珀写道相当强烈反对使用析构函数不必要的.
但是,这种"模式"主张像这样编写析构函数~T() { Dispose(false); }
.陈述的原因是它是一个"后备",在程序员忘记打电话的情况下调用Dispose()
.当然,这忽略了这样一个事实,即终结者在他们的行动中是不确定的,甚至可能永远不会运行.
因此:
如果我使用处理模式,我还应该提供析构函数吗?顺便说一下,我只处理托管资源(DataContext
例如实体框架).
如果我提供了一个析构函数:如果我的类派生自一个IDisposable
可能已经提供了析构函数的类,那么我是否应该提供一个析构函数呢?我认为在这种情况下永远不会写析构函数,但是文档说它无论如何都会自动调用基类的析构函数.
c# ×4
.net-4.0 ×2
asp.net ×2
caching ×2
asp.net-mvc ×1
destructor ×1
dispose ×1
inheritance ×1
javascript ×1
razor ×1