首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java NIO与DotNet IO性能

Java NIO与DotNet IO性能
EN

Stack Overflow用户
提问于 2010-08-25 15:35:15
回答 2查看 1.8K关注 0票数 4

有人知道Java NIO和DotNet IO性能之间的性能差异吗?

阅读this问题,似乎标准的Java-IO和DotNet-IO有非常相似的IO性能。

我感兴趣的是,Java的家伙们说,由于可以访问Java-NIO中的文件通道等,基于文件服务器的operations...etc应该会更快。

有没有可能java.nio性能比DotNet System.IO更好。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-26 01:50:48

就文件复制而言,无论您使用的是什么平台或api,都不应该有明显的差异。瓶颈是硬盘驱动器的磁盘旋转和磁头寻道。*

需要做的是将硬盘中的内容移动到某个内存中,然后将内存写入硬盘。对于传统的java io流,会有额外的内存拷贝。尽管如此,与磁盘速度相比,这并不是很大的浪费。

这很容易验证,FileChannel.transfer by /From不能大大超过输入-输出流复制的旧方法。

(*)当然,现在有更快的磁盘,但只要我们将磁盘定义为内存之后的下一个较慢的存储,这个论点就成立了。

(**)我们可以将虚拟磁盘称为磁盘,它实际上驻留在主内存中。那么内存复制就是瓶颈,这个论点就不再成立了。

票数 2
EN

Stack Overflow用户

发布于 2010-08-25 21:42:31

我实际上不能回答这个问题,但我可以自由地思考…

。。Java- file -IO和.Net都应该使用底层操作系统操作进行文件访问,并且文件访问始终是IO绑定的,而不是CPU绑定的。这意味着磁盘比CPU和内存更慢。

这意味着Java-File-IO和.Net在性能方面应该是相同的。

当涉及到套接字通信时,Java做了一件可怕的工作,实际上只是忽略了Posix标准,并且没有使用操作系统调用'select‘。这在Java NIO中通过引入“通道”得到了修复,“通道”实际上只是支持底层架构。在你需要为你正在读的每个套接字分配一个线程之前,可怕的资源浪费。

由于.Net比Java更新,我相信他们从来没有落入这个陷阱,并从一开始就增加了对它的支持。但是我没有用过.Net,所以我能看出来,我猜不出来。

对于两种情况下的套接字通信,Java-NIO和.Net System.IO都应该是网络绑定的,然后才能成为CPU绑定的。所以我不认为其中一个会比另一个快。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3563742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档