- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个返回 DTO 的 WebService。 Web 服务从昂贵的资源中获取数据以填充 DTO。在这个简单的例子中,几个 WebService 方法可能会命中同一个 ExpensiveResourceProvider 方法。执行缓存以最大化缓存命中率的最佳位置在哪里?在网络服务还是在 ExpensiveResourceProvider?我应该注意到,来自 ExpensiveResourceProvider 的一些数据经常更改,不应长时间缓存。
public class MyWebService : System.Web.Services.WebService
{
public MyDTO GetObject1And2()
{
MyDTO dto12 = HttpRuntime.Cache.Get("dto12") as MyDTO;
if(dto12 == null){
dto12 = new MyDTO();
dto12.Object1 = ExpensiveResourceProvider.GetObject1();
dto12.Object2 = ExpensiveResourceProvider.GetObject2();
HttpRuntime.Cache.Insert("dto12", dto12);
}
return dto12;
}
public MyDTO GetObject2And3()
{
MyDTO dto23 = HttpRuntime.Cache.Get("dto23") as MyDTO;
if (dto23 == null)
{
dto23 = new MyDTO();
dto23.Object2 = ExpensiveResourceProvider.GetObject2();
dto23.Object3 = ExpensiveResourceProvider.GetObject3();
HttpRuntime.Cache.Insert("dto23", dto23);
}
return dto23;
}
public MyDTO GetObject1And3()
{
MyDTO dto13 = HttpRuntime.Cache.Get("dto13") as MyDTO;
if (dto13 == null)
{
dto13 = new MyDTO();
dto13.Object1 = ExpensiveResourceProvider.GetObject1();
dto13.Object3 = ExpensiveResourceProvider.GetObject3();
HttpRuntime.Cache.Insert("dto13", dto13);
}
return dto13;
}
}
public class ExpensiveResourceProvider
{
public static object GetObject1()
{
object obj1 = HttpRuntime.Cache.Get("object1") as object;
if(obj1 == null){
obj1 = new object();
HttpRuntime.Cache.Insert("object1", obj1);
}
return obj1;
}
public static object GetObject2()
{
object obj2 = HttpRuntime.Cache.Get("object2") as object;
if (obj2 == null)
{
obj2 = new object();
HttpRuntime.Cache.Insert("object2", obj2);
}
return obj2;
}
public static object GetObject3()
{
object obj3 = HttpRuntime.Cache.Get("object3") as object;
if (obj3 == null)
{
obj3 = new object();
HttpRuntime.Cache.Insert("object3", obj3);
}
return obj3;
}
}
public class MyDTO
{
public object Object1 { get; set; }
public object Object2 { get; set; }
public object Object3 { get; set; }
}
最佳答案
数据的波动性是缓存位置的关键。根据您的缓存机制,您将有不同的方式来通知您的数据已过时并且是时候刷新它了。假设您的缓存机制提供了回调委托(delegate),在这种情况下,您的委托(delegate)应该与通常填充缓存的代码位于同一层(最好是与开始填充缓存的代码相同)。话虽如此,您的缓存似乎最好留给您的 ExpensiveResourceProvider。
关于asp.net - 缓存 DTO 或缓存来自昂贵资源的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358164/
我正在阅读 MongoDB,并试图了解它的最佳用途。我没有看到明确答案的一个问题是哪些操作便宜或昂贵,以及在什么条件下。 你能帮忙澄清一下吗? 谢谢。 最佳答案 人们经常声称 mongodb 的写入速
我正在寻找一个主要来源(或一个非常好的解释)来支持在为 iPhone 编写软件时使用 autorelease 是危险的或过于昂贵的说法。 许多开发者都提出了这种说法,我什至听说 Apple 不推荐它,
我意识到这离微优化领域太远了,但我很想知道为什么调用 DateTime.Now 和 DateTime.UtcNow 如此“昂贵”。我有一个示例程序,它运行几个场景来做一些“工作”(添加到一个计数器)并
我是一名优秀的程序员,十分优秀!