我正在编写一个haXe C#目标,并且我一直在研究haXe的std库的性能差异,因此我们可以通过其跨平台代码提供最佳性能.
一个非常好的例子是哈希表代码.我有点不情愿使用.NET的字典,因为它看起来很笨重(键/值对的结构可能占用大量的内存,因为内存对齐问题,除了它所持有的不必要的信息),并且因为在std上库没有对象哈希这样的东西,我真的以为我可以通过不必调用GetHashCode来压缩一点性能,并一直内联它.
同样很明显,Dictionary实现使用链表来处理冲突,这远非理想.
所以我们开始实现我们自己的解决方案,从IntHash(Dictionary)开始我们首先实现了Hopscotch哈希,但它实际上并没有很好,但很明显它不支持非常好的哈希表,因为H通常是机器字,并且随着H /长度的增加,性能越差.
然后我们跳转到实现khash -inspired算法.这个具有很大的潜力,因为它的基准测试令人印象深刻,并且它处理同一阵列上的冲突.它也有一些很棒的东西,比如调整大小而不需要像我们那样需要两倍的内存.
基准令人失望.当然,没有必要说我们的实现中的内存使用量远低于Dictionary的内存使用率.但我希望也能获得不错的性能提升,但不幸的是,情况并非如此.它不是太低 - 不到一个数量级 - 但对于两个集合和获取,.NET的实现仍然表现更好.
所以我的问题是:这是我们对C#的最佳选择吗?我试着寻找任何自定义解决方案,似乎几乎没有.有C5通用集合,但代码是如此混乱,我甚至没有测试.我也找不到基准.
那么......是吗?我应该绕着Dictionary <>吗?
谢谢!!!
我刚刚开始使用RSpec,并且在编写嵌套资源的控制器测试时遇到一些困难.我试过谷歌搜索,但没有太多运气.
有人可以提供"PUT更新"测试测试的基本示例,以确保更新嵌套资源吗?只是详细说明,我有像这样测试的等效(非嵌套)资源:
def mock_post(stubs={})
@mock_post ||= mock_model(Post, stubs).as_null_object
end
...
describe "PUT update" do
describe "with valid parameters" do
it "updates the requested post" do
Post.stub(:find).with("14") { mock_post }
mock_post.should_receive(:update_attributes).with({'these' => 'params'})
put :update, :id => "14", :post => {'these' => 'params'}
end
end
end
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一段时间来正确地对一个嵌套在Post下的"Comment"模型进行类似测试,但没有任何乐趣.任何建议赞赏.
据我所知,VIM,使之间的差异set,并setl在后者一个设置选项皮草的第一个设置所有缓冲区的选项目前只缓冲.如果我做了一个:set tw=80而不是一个,这是显而易见的:setl tw=80.
现在,当我这样做时:set ft=plsql,它只会操作当前的缓冲区,尽管我没有这样做setl.当然,这是有道理的.然而,我没有看到是否在某处记录了这一点.因此,问题可能归结为:是否存在默认情况下在当前缓冲区上运行而其他选项在"无处不在"运行的选项以及记录在哪里的选项?
深入研究有趣的python语言,因此语言中没有作为构造的转换.所以使用词典是阅读学习python第一版的第一选择.所以我试过......
cases = { 2 : readt3(e,t,off, partElems, partsNodes), # to read the triangular elements
3 : readq4(e,t,off, partElems, partsNodes), # to read the quadrangular elements
5 : readh8(e,t,off, partElems, partsNodes), # to read the hexa elements
}
# define functions
def readt3( e, t, off, partElems, partsNodes, partPnt ):
partsElems[partPnt].append(e)
nods = t[offset: offset+3];
for n in nods:
partsNodes[partPnt].append(n)
return
Run Code Online (Sandbox Code Playgroud)
并得到错误"readt3未定义",我认为我得到了这个,因为它没有在案例之前定义然后将函数定义移到上面的情况但仍然是相同的问题,但这次"e未定义"我无法理解这一点,所以e是一个函数参数,为什么我在e上得到一个与定义相关的错误?
在这种情况下,在模拟switch-case时应该在哪里放置函数定义?
我注意到日食JDT 使用void的基本类型.这可以被认为是正确的吗?
我正在寻找一种有效的方式来存储有序列表/项目集,其中:
理想情况下,性能会偏向于检索任何子集(或合并子集)的前N个项,并且存储将在内存中(并且最终可能在磁盘上持久)
这是我的代码,其中包含错误:
void ClassA::init()
{
HANDLE hThread;
data thread; // "thread" is an object of struct data
hThread = CreateThread(NULL, 0, C1::threadfn, &thread, 0, NULL);
}
DWORD WINAPI ClassA::threadfn(LPVOID lpParam)
{
data *lpData = (data*)lpParam;
}
Run Code Online (Sandbox Code Playgroud)
错误:
error C3867: 'ClassA::threadfn': function call missing argument list; use '&ClassA::threadfn' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)
使工作线程在单个类中工作的正确方法是什么?
参考下面的代码,一旦一个块被放入一个数组,你如何获取该块对象并运行该块中的实际代码.
另一个问题:如果我在下面的块中调用方法,该块是否封装了该方法中的代码或捕获方法的签名并以这种方式调用它?
-(void)blockCalledMethod
{
NSLog(@"Hello World");
}
-(void)programStart
{
NSArray * array = [[NSArray alloc] initWithObjects:[[^ { [self blockCalledMethod];} copy] autorelease],nil];
id pointerToBlock = [array lastObject];
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
except(OSError) as (errno, strerror, filename):
print "OSError [%d]: %s at %s" % (errno, strerror, filename)
Run Code Online (Sandbox Code Playgroud)
除非遇到OSError num,否则它运行良好.123(The file name, directory name, or volume label syntax is incorrect).然后我在除了代码行后得到以下错误:
ValueError: need more than 2 values to unpack
Run Code Online (Sandbox Code Playgroud)
它通过不使用filename属性来解决.但是我的要求阻止我不使用此属性.
还有另外一种方法吗?
我是SVN的新手,还有我坚持的东西.我在本地开发网站的时间最长(MAMP设置),然后在准备就绪时将整个网站直播.我直接在现场网站上做的任何小的额外更改,我经常会将实时服务器上的所有文件重新下载到我的localhost(因为我永远不会记住我已经更改过的所有文件).显然,这不是最好的做事方式.我很好奇如何在实时网络服务器上设置SVN,所以我在本地做的每一个更改都会在我告诉它时被推到网站上.我在哪里创建svn回购?/domain.com/www/svn?我可以创建www目录作为实际的回购,如果这样做是不好的做法?