Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate-Memcached的性能不佳_C#_.net_Nhibernate_Caching_Memcached - Fatal编程技术网

C# NHibernate-Memcached的性能不佳

C# NHibernate-Memcached的性能不佳,c#,.net,nhibernate,caching,memcached,C#,.net,Nhibernate,Caching,Memcached,我安装了Membase并创建了一个新的memcached bucket。在设置中,为了简单起见,我选择设置一个端口ID为1111的专用端口 在我的web.config中,我有以下内容: <configSections> <section name="memcache" type="NHibernate.Caches.MemCache.MemCacheSectionHandler, NHibernate.Caches.MemCache" requirePermission="

我安装了Membase并创建了一个新的memcached bucket。在设置中,为了简单起见,我选择设置一个端口ID为1111的专用端口

在我的web.config中,我有以下内容:

<configSections>
  <section name="memcache" type="NHibernate.Caches.MemCache.MemCacheSectionHandler, NHibernate.Caches.MemCache" requirePermission="false" />
  ...
</configSections>

<memcache>
  <memcached host="127.0.0.1" port="1111" />
</memcache>

...
在我的NHibernate配置部分:

<property name="cache.use_query_cache" >true</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">NHibernate.Caches.MemCache.MemCacheProvider, NHibernate.Caches.MemCache</property>
true
真的
NHibernate.Caches.MemCache.MemCacheProvider,NHibernate.Caches.MemCache
在我的每个NHibernate类映射中,我在类标记的右上方都有以下内容:

<cache usage="nonstrict-read-write" />

当我运行它时,我的查询比使用Syscache时慢一个数量级。有什么看起来不对劲的吗?我对这样的设置还比较陌生


提前感谢您的帮助。

您的配置似乎没有任何明显的问题。Syscache正在使用ASP.NET缓存提供程序,并且您的应用程序和缓存之间没有网络通信,但从理论上讲,它应该只比本地主机上运行的memcached快一点(假设您有足够的内存来避免交换)

您可能希望尝试使用探查器运行应用程序,以查看实际花费的时间。此外,您还应该确保memcached实际用于返回缓存的查询,并且没有发出任何sql查询—记录sql并期望仅在第一次执行查询时看到它

我使用的是a和,配置与您的类似,我对性能非常满意。membase还提供了一个很好的管理控制台,您可以在其中查看有关缓存使用情况的各种有用统计信息


另外,与您的问题无关,但在启用查询缓存之前,请确保您了解它是如何工作的。从ayende看到这一点。

很有趣。那么您没有使用基于磁盘的membase持久性?它是否仍在该配置中“复制”?我想知道在这种使用中性能与memcached相比如何。我没有使用任何membase特有的功能。只有运行memcached bucket的能力。幕后membase运行memcached deamon,因此我希望性能和功能与运行独立memcached相同。我做出这个选择是因为membase在5分钟内安装,在其他5分钟内配置,控制台提供了一种很好的方式来查看有关memcahced的统计信息。我实际上使用的是membase服务器,我的存储桶是memcached存储桶。我启动了我的NHibernate探查器,同样的查询和缓存调用也出现了,但它们不是70毫秒,而是现在每个都是20-25秒。如何使用Enyim Memcached客户端?我只见过使用memcacheprovider连接到配置文件中的情况。我在配置文件中有这个,而在应用程序中没有其他特定于缓存的内容:NHibernate.Caches.EnyimMemcached.memcacheprovider,NHibernate.Caches.EnyimMemcached。我的实体也有,所以这不应该是一个问题。对于查询来说,20-25s是非常重要的,所以我怀疑您的问题要么与缓存提供程序有关,要么与其他无关。您应该尝试使用clr分析器(红门蚂蚁分析器,点跟踪)来查看时间花在哪里。