任何有兴趣了解我来自哪里的人都可以参考第 1 部分,但这不是必需的。
下面是我编写的一段代码,用于从代理 API 捕获一些金融报价数据。代码将毫无错误地运行。我需要优化代码,因为在高峰时段 zf_TickEvent 方法每秒会调用超过 10000 次。我使用内存流来保存数据,直到达到一定大小,然后将其输出到文本文件中。
代理 API 只是单线程的。
void zf_TickEvent(object sender, ZenFire.TickEventArgs e)
{
outputString = string.Format("{0},{1},{2},{3},{4}\r\n",
e.TimeStamp.ToString(timeFmt),
e.Product.ToString(),
Enum.GetName(typeof(ZenFire.TickType), e.Type),
e.Price,
e.Volume);
fillBuffer(outputString);
}
public class memoryStreamClass
{
public static MemoryStream ms = new MemoryStream();
}
void fillBuffer(string outputString)
{
byte[] outputByte = Encoding.ASCII.GetBytes(outputString);
memoryStreamClass.ms.Write(outputByte, 0, outputByte.Length);
if (memoryStreamClass.ms.Length > 8192)
{
emptyBuffer(memoryStreamClass.ms);
memoryStreamClass.ms.SetLength(0);
memoryStreamClass.ms.Position = 0;
}
}
void emptyBuffer(MemoryStream ms)
{
FileStream outStream = new FileStream("c:\\test.txt", FileMode.Append);
ms.WriteTo(outStream);
outStream.Flush();
outStream.Close();
}
问题:
有什么建议可以让这更快吗?我将尝试改变缓冲区长度,但就代码结构而言,这(几乎)是最快的吗?
当内存流被填满并且我将它清空到文件中时,新数据会发生什么?在清空第一个缓冲区时,是否需要实现第二个缓冲区来保存该数据?还是 c# 足够聪明才能弄清楚?
感谢您的任何建议