[英]C# Winforms .NET framework Data Processing
我有一个程序,通过单击DataGridView中的一个项目来请求用户输入上的数据,并自动请求给定Stock符号的新信息。 从api服务器接收到数据后,它将排队,后台工作人员将处理数据并通过文本框,图表和各种风险分析来更新UI。
我编写了一个更新序列,更新了股票的热度,利润率,当前价格。 这就是我的问题所在。 我无法更改服务器的内容,并且响应仅包含一个请求ID。
我试图将请求ID存储到列表中,然后在列表中搜索以确定它是用户输入还是更新序列。 这样,我可以在一端添加一个标签,以告知应用程序将数据发送到哪里进行处理。 但是,这增加了整个过程3-5秒。
当数据发送给请求时,这里是正在使用的代码:
private void QuoteRequest_Click(object sender, EventArgs e)
{
if (CheckSymbolValidity() == false)
return;
string[] symbols = new string[1];
symbols[0] = this.textBoxSymbol.Text.ToUpper();
short[] quoteFields = new short[4];
quoteFields[0] = (short)ActiveTickFeedLib.ATQuoteFieldEnum.ATQuoteFieldLastPrice;
int requestId = ActiveTickFeed.feed.SendQuoteDbRequest(symbols, quoteFields);
Stored_ID(requestId+",[UI]");
}
然后对于更新序列,它使用相同的代码,但symbol [0] = sender.ToString(); 和Stored_ID(requestID +“,[UP]”); 从而为应用程序更改存储的标签。
队列工作者获取响应数据并匹配请求ID以获取标签。 然后从该标签获取要使用的存储方法,例如:
string[] split = data.Split(new string[] {","}, stringsplitoptions.None);
if(split[1] == "[UI]")
{
UI_Data(Res_Data); // method for using the data within the UI
}
//method for the update methods
if(split[1] == "[UP]")
{
UP_Data(Res_Data);
}
所有这一切都指示工作人员如何处理数据。 触发3次更新序列后,开始需要15到30秒的时间,UI数据才会显示在UI上。 一旦工作人员完成工作,就从存储列表中删除了requestID。
每次触发更新序列时,它都会在15秒内收到8,000个响应。
我的问题是,是否有更好的方法可以做到这一点? 我可以使用后台线程在计时器上运行仅更新序列的重复修改版本。
任何的意见都将会有帮助!! 我尝试了4种不同的方式,从仅存储UI请求开始,然后如果没有在列表中自动更新方法。
Update方法所做的全部就是更新UI使用的数据库。 然后,UI每5分钟加载一次新数据库。
先感谢您!!
这么多的响应可能是迭代与基于集合的编码样式的征兆。 如果涉及Linq2SQL或EF,我会四处检查以确保正在使用急切的加载(或强制使用.ToList()或.AsEnumerable()进行早期评估,同时避免使用.AsQueryable())。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.