【发布时间】:2023-03-26 22:40:01
【问题描述】:
我正在尝试为交易系统构建数据库。数据是外汇报价数据,结构非常简单,下面是我用来创建数据对象的类。正如您所注意到的,该类只有四个属性。非常简单的类,对吧?
using System;
using System.Globalization;
namespace InteractiveBrokersTradingSystem
{
class ForexDataObject
{
public ForexDataObject(string pairName, string timeString, double bid, double ask)
{
PairName = pairName;
var span = DateTime.ParseExact(timeString, "yyyy.MM.dd HH:mm:ss.fff", CultureInfo.InvariantCulture) - new DateTime(1970, 1, 1, 0, 0, 0);
TimeStamp = span.Ticks;
Bid = bid;
Ask = ask;
}
public string PairName { get; set; }
public long TimeStamp { get; set; }
public double Bid { get; set; }
public double Ask { get; set; }
}
}
好的,现在我们读取保存大量分时数据的 CSV 文件。我在这里进行了实验:我收集了 1 个月(2012.01.01 --- 2012.02.02)EURUSD 对报价数据,保存在 EURUSD.csv 中。 csv 文件有 2465671 行。我在 csv 中读取的方式是构建 ilist 如下所示,所以现在我有 2465671 个对象,每个对象都保存一个刻度:
IList<ForexDataObject> forexObjectList = new List<ForexDataObject>();
string[] headers = csv.GetFieldHeaders();
while (csv.ReadNextRecord())
{
var forexDataObject = new ForexDataObject(pairName, csv[0],Convert.ToDouble(csv[1]),Convert.ToDouble(csv[2]));
forexObjectList.Add(forexDataObject);
}
CSV 文件为 137MB,现在我想将这些 2465671 对象写入一个名为 Forex.YAP 的 Yap 文件,代码如下:
using (IObjectContainer db = Db4oEmbedded.OpenFile(ForexYapFileName))
{
foreach(ForexDataObject forexDataObject in forexObjectList)
{
db.Store(forexDataObject);
}
}
存储到 db4o 数据库的统计: 时间:将近 20 分钟!!!! YAP 文件大小为:248MB
我做错了吗?
【问题讨论】:
标签: c# performance time db4o