gpt4 book ai didi

c# - Appfabric 缓存的执行速度比 SQL Server 2008 慢 4 倍??

转载 作者:太空狗 更新时间:2023-10-29 19:44:16 24 4
gpt4 key购买 nike

我正在运行一个测试,比较 appfabric 和 SQL Server 2008 的提取时间,看起来 appFabric 的执行速度比 SQL Server 慢 4 倍。

我有一个 SQL Server 2008 安装程序,它只包含一个有 4 列的表(所有 nvarchar)。该表有 6000 行。我在 appfabric 缓存中插入同一行(作为 CLR 可序列化对象)。我正在运行循环以获取数据 x 次。

这是代码

public class AppFabricCache
{
readonly DataCache myDefaultCache;

public AppFabricCache()
{
//-------------------------
// Configure Cache Client
//-------------------------

//Define Array for 1 Cache Host
var servers = new List<DataCacheServerEndpoint>(1);

//Specify Cache Host Details
// Parameter 1 = host name
// Parameter 2 = cache port number
servers.Add(new DataCacheServerEndpoint(@"localhost", 22233));

//Create cache configuration
var 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 exception messages since this sample works on a cache aside
DataCacheClientLogManager.ChangeLogLevel(System.Diagnostics.TraceLevel.Off);

//Pass configuration settings to cacheFactory constructor
DataCacheFactory myCacheFactory = new DataCacheFactory(configuration);

//Get reference to named cache called "default"
myDefaultCache = myCacheFactory.GetCache("default");
}

public bool TryGetCachedObject(string key, out object value)
{
value = myDefaultCache.Get(key);
bool result = value != null;
return result;
}

public void PutItemIntoCache(string key, object value)
{
myDefaultCache.Put(key, value, TimeSpan.FromDays(365));
}

}

这是从缓存中获取数据的循环

public double RunReadStressTest(int numberOfIterations, out int recordReadCount)
{
recordReadCount = 0;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < numberOfIterations; i++)
{
for (int j = 1; j <= 6000; j++)
{
string posId = "PosId-" + j;
try
{
object value;
if (TryGetCachedObject(posId, out value))
recordReadCount++;
}
catch (Exception e)
{
Trace.WriteLine("AS%% - Exception - " + e.Message);
}
}
}
sw.Stop();
return sw.ElapsedMilliseconds;
}
}

我有完全相同的逻辑从 SQL Server 检索数据。它创建了一个

sqlCommand = 'Select * from TableName where posId = 'someId'' 

这是结果...

SQL Server 2008 R2  Reading-1(ms)   Reading-2(ms)   Reading-3(ms)   Average Time in Seconds
Iteration Count = 5 2528 2649 2665 2.614
Iteration Count = 10 5280 5445 5343 5.356
Iteration Count = 15 7978 8370 7800 8.049333333
Iteration Count = 20 9277 9643 10220 9.713333333

AppFabric Reading-1 Reading-2 Reading-3 Average Time in Seconds
Iteration Count = 5 10301 10160 10186 10.21566667
Iteration Count = 10 20130 20191 20650 20.32366667
Iteration Count = 15 30747 30571 30647 30.655
Iteration Count = 20 40448 40541 40503 40.49733333

我是不是漏掉了什么?为什么这么慢?

最佳答案

区别在于网络开销。在您的 SQL 示例中,您跳过网络一次并选择 N 行。在您的 AppFabric 示例中,您PER RECORD 在网络上跳转,而不是批量处理。这就是区别。为了证明这一点,请将您的记录临时存储在 AppFabric 中作为列表并一次只获取列表,或者使用 AppFabric Bulk API 在一个请求中选择所有记录 - 这应该可以解释大部分差异。

关于c# - Appfabric 缓存的执行速度比 SQL Server 2008 慢 4 倍??,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com