繁体   English   中英

C#Winforms .NET框架数据处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM