在对我们全新的主系统进行压力测试时,我遇到了AppFabric Cache的并发问题.当同时使用相同的cacheKey调用许多DataCache.Get()和Put()时,我尝试存储相对较大的objet,我收到"ErrorCode:SubStatus:暂时失败.请稍后重试." 它可以通过以下代码重现:
var dcfc = new DataCacheFactoryConfiguration
{
Servers = new[] {new DataCacheServerEndpoint("localhost", 22233)},
SecurityProperties = new DataCacheSecurity(DataCacheSecurityMode.None, DataCacheProtectionLevel.None),
};
var dcf = new DataCacheFactory(dcfc);
var dc = dcf.GetDefaultCache();
const string key = "a";
var value = new int [256 * 1024]; // 1MB
for (int i = 0; i < 300; i++)
{
var putT = new Thread(() => dc.Put(key, value));
putT.Start();
var getT = new Thread(() => dc.Get(key));
getT.Start();
}
Run Code Online (Sandbox Code Playgroud)
使用不同的密钥调用Get()或同步DataCache时,不会出现此问题.如果DataCache是从DataCacheFactory的每次调用获得的(DataCache应该是线程安全的)或延长超时,它就没有效果,仍然会收到错误.在我看来MS很遗憾会留下这样的错误.有没有人遇到过类似的问题?
| 归档时间: |
|
| 查看次数: |
4105 次 |
| 最近记录: |