0

我有一个应用程序将消息记录到两个文件中,并通过套接字发送它们。一个文件获得二进制表示,另一个获得人类可读的等价物。消息类具有将消息的人类可读版本输出到流的功能。二进制表示在消息类中以字节 [] 的形式提供。

我想最大化传出消息率,所以我觉得日志记录操作应该尽可能快。

一种可能的方法是简单地创建一个任务来执行每个日志记录操作并将对消息实例的引用传递给每个任务。对我来说,这种方法的问题是消息实例是一个池对象,并且必须在某个时候返回到池中。由于多个线程持有对消息对象的引用,因此很难协调将消息对象返回到池中,以便最后一个使用它的线程实际执行返回。另外,我不想在每次需要发送消息时创建任务(或任何对象)。

我相信 Write() 的最快实现将具有以下两个特征: 1. 将在与发送消息的线程不同的线程上处理将数据写入文件的工作。2. 不会​​分配任何额外的对象(因此没有机会为 GC 暂停)。由于不希望分配新内存,Write() 方法可以阻塞,直到有足够的空间来接受写入消息。

我正在考虑在这里使用类似 CircularBuffer/CircularStream 的东西:http: //circularbuffer.codeplex.com/(尽管当缓冲区已满时此实现不会阻塞)

你觉得呢?你有没有什么想法?

4

0 回答 0