C# AppFabric DataCacheFactory初始化通常需要约30秒
当我初始化客户端以连接到AppFabric的缓存时,在以下线路上连接似乎需要30秒的时间:C# AppFabric DataCacheFactory初始化通常需要约30秒,c#,asp.net,appfabric,C#,Asp.net,Appfabric,当我初始化客户端以连接到AppFabric的缓存时,在以下线路上连接似乎需要30秒的时间: factory = new DataCacheFactory(configuration); 请参阅下面的完整初始化代码-主要取自。 我说的前后不一致,因为有时需要1秒,有时需要27、28等等。。。秒。我有一个使用AppFabric缓存的asp.net站点,它位于同一域的不同框中。除了连接时间不一致外,一切都很好。当它连接时,一切都很好-我只需要让它在~1秒钟内持续连接:。。。想法 public st
factory = new DataCacheFactory(configuration);
请参阅下面的完整初始化代码-主要取自。
我说的前后不一致,因为有时需要1秒,有时需要27、28等等。。。秒。我有一个使用AppFabric缓存的asp.net站点,它位于同一域的不同框中。除了连接时间不一致外,一切都很好。当它连接时,一切都很好-我只需要让它在~1秒钟内持续连接:。。。想法
public static void Init()
{
if (cache == null)
{
Stopwatch sw = new Stopwatch();
sw.Start();
try
{
//Define Array for 1 Cache Host
List<DataCacheServerEndpoint> servers = new List<DataCacheServerEndpoint>(1);
var appFabricHost = ConfigurationManager.AppSettings["AppFabricHost"];
var appFabricPort = ConfigurationManager.AppSettings["AppFabricPort"].ParseAs<int>();
//Specify Cache Host Details
// Parameter 1 = host name
// Parameter 2 = cache port number
servers.Add(new DataCacheServerEndpoint(appFabricHost, appFabricPort));
TraceHelper.TraceVerbose("Init", string.Format("Defined AppFabric - Host: {0}, Port: {1}", appFabricHost, appFabricPort));
//Create cache configuration
DataCacheFactoryConfiguration configuration = new DataCacheFactoryConfiguration();
//Set the cache host(s)
configuration.Servers = servers;
//Set default properties for local cache (local cache disabled)
configuration.LocalCacheProperties = new DataCacheLocalCacheProperties();
//Disable tracing to avoid informational/verbose messages on the web page
DataCacheClientLogManager.ChangeLogLevel(System.Diagnostics.TraceLevel.Off);
//Pass configuration settings to cacheFactory constructor
factory = new DataCacheFactory(configuration);
//Get reference to named cache
cache = factory.GetCache(cacheName);
TraceHelper.TraceVerbose("Init", "Defined AppFabric - CacheName: " + cacheName);
}
catch (Exception ex)
{
TraceHelper.TraceError("Init", ex);
}
finally
{
TraceHelper.TraceInfo("Init", string.Format("AppFabric init took {0} seconds", sw.Elapsed.Seconds));
}
if (cache == null)
{
TraceHelper.TraceError("Init", string.Format("First init cycle took {0} seconds and failed, retrying", sw.Elapsed.Seconds));
UrlShortener.Init(); // if at first you don't succeed, try try again ...
}
}
}
如果将所有配置信息保存在.config文件中而不是以编程方式创建配置,是否会更快和/或更一致?有关详细信息,请参阅-我将始终使用此方法,而不是编程配置,因为当某些内容发生更改时,它更易于更新
否则,我认为一般的建议是,由于DataCacheFactory所做的工作(即与集群中的每台服务器建立网络连接),创建DataCacheFactory是一个昂贵的对象。您肯定不希望每次需要从缓存中获取某些内容时都创建DataCacheFactory,相反,您可能希望考虑在应用程序中创建DataCacheFactory,开始时可能是一个单例,然后在整个应用程序中重用该单例,无法解决问题,但可能有助于缓解问题。如果有帮助,我很乐意提供更多信息?感谢回复-在解决问题之前,我无法将此移到prod。我已经在应用程序启动和重用时调用了Init,所以它是一个单例。一旦Init完成,我就没有问题了,只是初始电位~30秒,这是触发点,请参见此处:。我将按照建议将AppFabric配置移动到web.config中,并会让您知道这是否解决了问题。干杯。嗨,菲尔-我现在在web.config上看到了它,我看到了同样的问题。我甚至看到连接需要4分钟。我猜factory.GetCachexyz有一个内置超时,所以我的代码会一直重试,直到成功。任何其他想法,这是可悲的表现。