0

我需要在我的套接字应用程序中接收到的字节的集合类型(它处理约 5k 的并发连接)。

我尝试使用 aList<byte>但由于它有一个内部数组并且我收到大量数据,它可能会导致OutOfMemoryExceptions.

所以我需要一个集合,

  • 将数据保存在较小的块中;像展开的链接列表
  • 提供快速查找(最好是IList<T>),因为我会在每次接收操作后寻找一个标记消息结束的分隔符。

我现在使用的是Stream. 我MemoryStream为不涉及太多数据的操作提供一个,为涉及大量数据FileStream的操作提供一个临时文件。

MemoryStream与 a 没有什么不同List<T>,但我不喜欢将文件用作缓冲区。

那么......
你推荐什么收藏或方法?

4

2 回答 2

0

您似乎为网络应用程序使用了不合适的架构。您应该只缓冲那些需要的数据。在这里,您使用列表来缓冲数据,直到收到所需的数据量。

我建议您应该检查数据本身中每个数据接收的分隔符,如果存在,您应该只推送数据,直到遇到分隔符。数据准备好后,您应该从列表中取出并使用它并从列表中丢弃。将所有内容添加到列表中并不是一个好方法,并且肯定会消耗大量内存。

理想情况下,您应该有一个协议,该协议始终在您实际接收数据之前通知您将要接收的数据长度。这样,您可以确保已收到所需的数据,并且您不应该依赖分隔符。

于 2013-01-10T13:55:46.910 回答
0

一个可能的快速而肮脏的解决方案:

在程序开始时,为您将接收的最大数据量分配一个足够大的缓冲区。使用单独的“计数”字段来跟踪当前正在使用的数据量。

(我不太喜欢这个解决方案;我会使用文件或找到某种方法来处理块中的数据,但它可能对你有用)。

于 2013-01-10T14:34:26.200 回答