我有一个算法,通过从一.csv文档(约3700条线)中读取的数据对数据进行扫描,并评估每一条目中哪一个交易周为当年的每个星期的每个星期的0元数据,并将计算值定为交易周。
它的工作进展良好,但业绩仍然滞后。 这是第3项职能,利用任务。 Invoke。
时间测试的结果。
页: 1
之后:00:23.27
<>>>>>
每个交易周之后加休息时间。 时间有所改善,但仍然缓慢。
新时间:00:15.74
就我们而言,今年的第一周是第1周(而不是0),从该年第一季度到星期日。 如果该年的第一天为星期日,则第1周为一天。
private void SetDefiniteWeeks()
{
string FileLoc = FilePath + Market + ".csv";
string[] Data = File.ReadAllLines(FileLoc);
var FileData = from D in Data
let DataSplit = D.Split( , )
select new
{
Date = DateTime.Parse(DataSplit[0]),
ClosingPrice = double.Parse(DataSplit[4])
};
//assign each date to it s relevant week
TradingWeek TW;
List<TradingWeek> tradingWeek = new List<TradingWeek>();
foreach (var pe in FileData)
{
// DateTime dt = pe.Date;
int Year = pe.Date.Year;
string End_of_Week = "Sunday";
int WeekCount = 0;
DateTime LoopDate_Begin = new DateTime(Year,1,1);
DateTime LoopDate_End = new DateTime(Year,12,31);
do
{
if (LoopDate_Begin.DayOfWeek.ToString() == End_of_Week)
{
WeekCount++;
if (LoopDate_Begin.DayOfYear > pe.Date.DayOfYear && LoopDate_Begin.DayOfYear < (pe.Date.DayOfYear + 7))
{
TW = new TradingWeek { Week = WeekCount, Date = pe.Date };
tradingWeek.Add(TW);
break;
}
}
LoopDate_Begin = LoopDate_Begin.AddDays(1);
} while (LoopDate_Begin.Date.ToString() != LoopDate_End.Date.ToString());
}
}
请提供帮助。
<>>>>>
新的技术评估
00:00:06.686
大有改进。 感谢大家的帮助。
修订后的法典:
CalendarWeekRule cw = CalendarWeekRule.FirstDay;
var calendar = CultureInfo.CurrentCulture.Calendar;
var trad_Week = (from pe in FileData
select new TradingWeek
{
Date = pe.Date,
Week = (calendar.GetWeekOfYear(pe.Date, cw,DayOfWeek.Sunday))
}).ToList();