当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

.NET-Java NIO与Dotnet IO性能

admin 117℃
有人知道表演的区别吗 Java NIO与Dotnet IO性能之比较。

阅读this问题,标准的java io和dotnet io似乎有 IO性能非常相似。

我感兴趣的是,Java人员指出,由于访问Java NIO中的文件通道等,大容量文件复制、基于文件服务器的操作等应该快得多。

有没有可能 java.nio 性能优于dotnet System.IO .

谢谢。

至于文件复制,不管您使用的是什么平台或api,都不应该有显著的差异。瓶颈是硬盘的磁盘旋转和磁头搜寻。*

需要做的是,将硬盘内容移动到一些内存中,然后将内存写入硬盘。对于传统的java io流,将有额外的内存副本。与磁盘速度相比,这仍然不是很大的浪费。

这很容易验证,filechannel.transferto/from比不上旧的输入输出流复制方式。

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

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

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

。Java文件IO和.NET都应该使用底层操作系统操作来访问文件,文件访问总是IO绑定的,而不是CPU绑定的。这意味着磁盘比CPU和内存慢。

这意味着Java文件IO和.NET在性能上应该相同。

当谈到socket通信时,java做了一个糟糕的工作,实际上只是忽略了posix标准,没有使用os调用'select'。这在java nio中得到了修正,引入了'channels',实际上只支持底层架构。在需要为正在读取的每个套接字分配线程之前,资源的浪费是可怕的。

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

对于java nio和.net system.io这两种情况下的socket通信,它们在成为cpu绑定之前都应该是网络绑定的。所以我不认为一个比另一个快。

转载请注明:我的代码 » .NET-Java NIO与Dotnet IO性能