我已经比较了.NET 4.0中的system.runtime.caching和企业库缓存块的性能,令我惊讶的是,当从缓存项中获取大数据集时,它的表现非常糟糕.
Enterprise Library在大约0,15ms内获取100个对象,在大约0.25ms内获取10000个对象.这对于进程内缓存来说是快速且自然的,因为实际上不需要复制数据(仅引用).
.NET 4.0缓存在大约25毫秒内获取100个对象,在大约1500毫秒内获取10000个对象!相比之下这非常慢,这让我怀疑缓存是在进程外完成的.
我是否缺少一些配置选项,例如启用进程内缓存,还是企业库缓存块真的这么快?
更新
这是我的基准:
首先,我将数据从数据库加载到缓存(与基准分开).
我在get方法周围使用一个计时器来测量时间(以毫秒为单位):
EnterpriseLibrary缓存
Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager _cache;
public void InitCache(){
_cache = CacheFactory.GetCacheManager("myCacheName");
}
public void Benchmark(){
HighPerformanceTimer timer = new HighPerformanceTimer();
timer.Start();
myObject o = (myObject)_cache.GetData(myCacheKey);
timer.Stop();
Response.Write(timer.GetAsStringInMilliseconds());
}
Run Code Online (Sandbox Code Playgroud)
.NET 4.0缓存
System.Runtime.Caching.MemoryCache _cache;
public void InitCache(){
_cache = new MemoryCache("myCacheName");
}
public void Benchmark(){
HighPerformanceTimer timer = new HighPerformanceTimer();
timer.Start();
myObject o = (myObject)_cache.Get(myCacheKey);
timer.Stop();
Response.Write(timer.GetAsStringInMilliseconds());
}
Run Code Online (Sandbox Code Playgroud)
基准测试执行1000次以计算获取对象的平均时间,以确保测试的可靠性.计时器是我使用的自定义计时器,任何计时器计数毫秒都应该这样做.
有趣的是,"myObject"有很多引用.如果涉及任何序列化,我就会理解为什么这个对象的性能不同(比如在分布式缓存中),但这些都是进程中的缓存,理论上应该可以在没有很多重大差异的情况下工作.
我正在使用Mocha运行单元测试,而不是在报告器中显示所有抛出的AssertionErrors Mocha在第一个错误时崩溃.有什么建议?
我在崩溃时遇到的错误是这样的:
/Users/Robert/Code/JRJ/Server/node_modules/chai/lib/chai/assertion.js:106
throw new AssertionError(msg, {
^
AssertionError: expected 200 to equal 202
npm ERR! weird error 8
npm ERR! not ok code 0
Run Code Online (Sandbox Code Playgroud)
无论我使用Chai还是内置断言库,它都是一样的.我用这个命令运行Mocha(我运行它npm test):
mocha --reporter 'spec' --recursive
Run Code Online (Sandbox Code Playgroud)
我正在使用的库版本是:
测试代码:
var hapi = require('hapi'),
expect = require('chai').expect,
assert = require('assert');
describe("Customer API", function(){
var server = require('../../../../src/apis/customer');
//works as expected
describe('simpleExample', function(){
it("should cause a test failure", function(done){
expect(200).to.equal(202);
done();
});
});
//crashes Mocha
describe('Authentication', function(){
it('Should get user token', …Run Code Online (Sandbox Code Playgroud) 我安装了 CocoaPods 并在 Xcode 中打开了 xcworkspace,但是在尝试构建时出现此错误:
Ld /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Products/Debug-iphonesimulator/CocoaPodsFailure.app/PlugIns/CocoaPodsFailureTests.xctest/CocoaPodsFailureTests normal x86_64
cd /Users/Robert/Code/_Playing/react-native-cocoapods/CocoaPodsFailure/ios
export IPHONEOS_DEPLOYMENT_TARGET=8.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.1.sdk -L/Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Products/Debug-iphonesimulator -F/Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Products/Debug-iphonesimulator -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -filelist /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Intermediates/CocoaPodsFailure.build/Debug-iphonesimulator/CocoaPodsFailureTests.build/Objects-normal/x86_64/CocoaPodsFailureTests.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -mios-simulator-version-min=8.0 -bundle_loader /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Products/Debug-iphonesimulator/CocoaPodsFailure.app/CocoaPodsFailure -Xlinker -object_path_lto -Xlinker /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Intermediates/CocoaPodsFailure.build/Debug-iphonesimulator/CocoaPodsFailureTests.build/Objects-normal/x86_64/CocoaPodsFailureTests_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -ObjC -framework XCTest /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Products/Debug-iphonesimulator/libReact.a -lPods-CocoaPodsFailureTests -Xlinker -dependency_info -Xlinker /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Intermediates/CocoaPodsFailure.build/Debug-iphonesimulator/CocoaPodsFailureTests.build/Objects-normal/x86_64/CocoaPodsFailureTests_dependency_info.dat -o /Users/Robert/Library/Developer/Xcode/DerivedData/CocoaPodsFailure-eqajgeoxnquybpakipqqptcwudjt/Build/Products/Debug-iphonesimulator/CocoaPodsFailure.app/PlugIns/CocoaPodsFailureTests.xctest/CocoaPodsFailureTests
Undefined symbols for architecture x86_64:
"std::__1::__next_prime(unsigned long)", referenced from:
std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, unsigned long>, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned …Run Code Online (Sandbox Code Playgroud) 这是我的第一个多线程实现,所以这可能是初学者的错误.线程处理每隔一行像素的渲染(因此所有渲染都在每个线程内处理).如果线程分别渲染屏幕的上部和下部,则问题仍然存在.
两个线程从相同的变量读取,这会导致任何问题吗?据我所知,只有写作才会导致并发问题......
可以调用相同的函数导致任何并发问题吗?而且,从我的理解,这应该不是一个问题......
两个线程写入同一变量的唯一时间是保存计算的像素颜色.它存储在一个数组中,但它们永远不会写入该数组中的相同索引.这会导致问题吗?
多线程渲染图像 (垃圾邮件防止阻止我直接发布图像..)
PS.我在两种情况下使用完全相同的实现,唯一的区别是为渲染创建的单个线程与两个线程.
.net ×1
.net-4.0 ×1
c++ ×1
caching ×1
cocoapods ×1
ios ×1
mocha.js ×1
node.js ×1
performance ×1
raytracing ×1
react-native ×1
testing ×1