Tag:

System.Collections.Generic.Dictionary =终极表现?

我正在编写一个haXe C#目标,我一直在研究haXe的std库的性能差异,因此我们可以通过其跨平台代码提供最佳性能。 一个非常好的例子是哈希表代码。 我有点不情愿使用.NET的字典,因为它看起来很笨重(键/值对的结构可能占用大量的内存,因为内存对齐问题,除了它所持有的不必要的信息),并且因为在std上库没有对象哈希这样的东西,我真的以为我可以通过不必调用GetHashCode来压缩一点性能,并一直内联它。 同样很明显,Dictionary实现使用链表来处理冲突,这远非理想。 所以我们开始实现我们自己的解决方案,从IntHash(Dictionary)开始我们首先实现了Hopscotch哈希 ,但实际上并没有很好,但很明显它不支持非常好的哈希表,因为H通常是机器字,并且随着H /长度的增加,性能越差。 然后我们跳转到实现khash -inspired算法。 这个具有很大的潜力,因为它的基准测试令人印象深刻,并且它处理同一arrays上的冲突。 它还有一些很棒的东西,比如resize而不需要像我们那样需要两倍的内存。 基准令人失望。 当然,没有必要说我们的实现中的内存使用量远低于Dictionary的内存使用率。 但我希望也能获得不错的性能提升,但不幸的是情况并非如此。 它不是太低 – 不到一个数量级 – 但对于两组和得分,.NET的实现仍然表现得更好。 所以我的问题是:这是我们对C#的最佳选择吗? 我试着寻找任何自定义解决方案,似乎几乎没有。 有C5通用集合,但代码是如此混乱,我甚至没有测试。 我也找不到基准。 那么……是吗? 我应该包裹Dictionary 吗? 谢谢!!!

使用ASP.NET网站中的File.CreateFile将文件插入Sql Server 2012 FileTable时访问被拒绝

我有一个ASP.NET网站。 我想将文件上传到网站并将其保存到SqlServer 2012中的FileTable中。 上传后,我的网站代码有一个Stream对象,我想用它来保存 System.IO.File.Create() 我去的时候可以在Windows资源管理器中访问FileTable \\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName 我可以使用Windows资源管理器在此文件夹中手动创建文件。 我也可以使用SQL将文件插入到File表中。 在这两种情况下,Windows资源管理器和SQL Server都按预期显示文件。 但是,如果我尝试使用System.IO.File.CreateFile在路径中创建文件,例如 File.Create(\\\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName\myfile.jpg) 我收到消息“访问路径'[路径]’被拒绝” 我假设这是因为我的IIS应用程序池标识无权读取/写入此位置。 通常,我会进入NTFS权限并分配对身份帐户的读/写访问权限,但我无法执行此操作,因为基础文件夹对我来说是隐藏的。 我已经考虑将我的Stream对象转换为字节数组并使用SQL将其插入到FileTable中,但这似乎效率低下,因为我必须首先将流转换为字节数组,然后将其传递给SQL。 这似乎是我解析我的文件数据两次以保存它一次。 是否可以使用File.Create或类似的内容在ASP.NET网站中写入文件表。 如果是这样,我该怎么做?