当我尝试使用NamedPipeServerStream
类对象通过调用其Write()
方法来传输1GB数据时会发生什么?特别是如果数据不是立即被客户使用的话。数据在哪里?管道传输大数据
什么是使用管道传输大量数据的好技术?将它分成更小的块并实现一些通信协议?
是否有更好的替代管道?我想避免写入硬盘。
当我尝试使用NamedPipeServerStream
类对象通过调用其Write()
方法来传输1GB数据时会发生什么?特别是如果数据不是立即被客户使用的话。数据在哪里?管道传输大数据
什么是使用管道传输大量数据的好技术?将它分成更小的块并实现一些通信协议?
是否有更好的替代管道?我想避免写入硬盘。
您可以使用内存映射文件来处理这些事情。他们对IPC工作非常好。请参阅here。
我假设你的进程在同一台机器内通信。
编辑:或者你可以去插座。
编辑:我有一些使用命名管道的实现,并不是很稳定,所以我放弃了它,切换到内存映射文件。如果你仍然希望坚持使用命名管道,你可以将你的负载分成块,这些块可以由一个标题加上一些相关信息(如块大小,块索引,总块数等等),然后期待在写下一个块之前由客户确认。
你为什么不尝试一下,找出答案?我个人的猜测是,对管道的大量写入会很快挂起,等待读者在另一端使用数据。所以在这个意义上,管道给你一个自动协议。 –
例如,客户端将尝试读取较小的数据块(比如1K),这将需要一些时间,而数据一次写入,并且所有数据必须到某处。可能还有其他我现在无法想到的场景。 – mcu
所以你说1GB的数据没有问题,只要客户一次读完所有数据? – mcu