3

一些细节;我在与 IIS 相同的机器上运行 AppFabric 1.1 的开箱即用普通配置。我没有启用 AppFabrics 的本地缓存,因为我对此本地缓存边界之外的性能感兴趣。

现在很明显,像 httpruntime 缓存这样的进程内缓存将会非常快。事实上,它能够在不到 10 毫秒的时间内检索一个正在测试的数据集,其中包含大约 14,000 条记录(序列化时大约为 25MB)。

但是,从应用程序结构中检索相同数量的数据大约需要 9 秒。显然,这是一个巨大的差异,因为我永远无法将其用作任何替代品(我暗地里希望我能做到)。

这个表演听起来对吗?配置中是否有任何明显的陷阱我错过了?

4

1 回答 1

2

我会努力回答的......

首先,您不是在比较同一件事:当您从 HttpRuntime 缓存中获取某些内容时,您将获得对内存中初始项目的引用。如果某些代码修改了此项,所有其他用户/线程将看到更改。这就是为什么有时建议克隆您放入本地缓存的所有内容的原因。

因为 AppFabric 缓存是为 Web 场设计的,所以您不能这样做,因为需要通过网络发送对象(即使主机在同一台机器上)。因此,数据项使用 NetDataContractSerializer 进行序列化。

AppFabric 并不比 HttpRuntime 快,仅仅是因为它不是为此而设计的。它专为 WebFarms 和大量数据而设计,可引导应用程序获得更好的可靠性、可扩展性和性能。

举个例子,在我的公司,几年前我们只使用了 HttpRuntime Cache。现在这完全不可能,因为我们有 30 多台服务器并且数据库过载:AppFabric 是减少数据库负载和提高 Web 应用程序性能(来自缓存集群而不是从数据库加载的项目)的完美解决方案。

如果您只有一台服务器,那么可以肯定我们使用 AppFabric 不会有任何优势。还建议有专用的缓存主机。

最后,我确信您的对象还有一些事情要做,因为 14 000 的数据集不是最佳的!

于 2013-04-11T19:37:44.897 回答