【发布时间】:2012-05-31 06:17:10
【问题描述】:
我对C#很陌生,这是我的第一个问题,请对我温柔
我正在尝试编写一个应用程序来从数据提供者那里捕获一些刻度数据,下面是程序的主要部分
void zf_TickEvent(object sender, ZenFire.TickEventArgs e)
{
output myoutput = new output();
myoutput.time = e.TimeStamp;
myoutput.product = e.Product.ToString();
myoutput.type = Enum.GetName(typeof(ZenFire.TickType), e.Type);
myoutput.price = e.Price;
myoutput.volume = e.Volume;
using (StreamWriter writer = File.AppendText("c:\\log222.txt"))
{
writer.Write(myoutput.time.ToString(timeFmt) + ",");
writer.Write(myoutput.product + "," );
writer.Write(myoutput.type + "," );
writer.Write(myoutput.price + ",");
writer.Write(myoutput.volume + ",");
}
我已经成功地将数据写入文本文件,但是我知道这个方法在高峰时间每秒会被调用 10000 次,并且打开一个文件并每秒附加很多次是非常低效的,我被指出使用缓冲区或某种方式,但我不知道该怎么做,我尝试阅读文档但我仍然不明白,这就是我在这里求助的原因。
请给我一些(工作的)sn-p 代码,以便我可以指出写入方向。谢谢
编辑:我已经尽可能地简化了代码
using (StreamWriter streamWriter = File.AppendText("c:\\output.txt"))
{
streamWriter.WriteLine(string.Format("{0},{1},{2},{3},{4}",
e.TimeStamp.ToString(timeFmt),
e.Product.ToString(),
Enum.GetName(typeof(ZenFire.TickType), e.Type),
e.Price,
e.Volume));
}
ED 告诉我将我的流制作成一个字段,语法是什么样的?任何人都可以发布一些代码来帮助我吗?非常感谢
【问题讨论】:
-
一种可能的替代方法是将写入操作推送到队列中,并在可能的情况下触发最终写入队列内容的后台线程
-
我已经展示了如何创建一个字段 (
private StreamWriter _writer;) -
@andrey,谢谢,请在此处阅读我的问题的第 2 部分 stackoverflow.com/questions/10884106/…