C#Winforms .NET框架数据处理

问题描述 投票:2回答:1

我有一个程序,通过使用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]");
}

然后对于更新序列,它使用相同的代码,但符号[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上。这是一旦worker完成了从存储列表中删除的requestID的工作。

每次触发更新序列时,它都会在15秒内收到8,000个响应。

我的问题是,有更好的方法吗?我可以使用后台线程在计时器上运行仅更新序列的重复修改版本。

任何的意见都将会有帮助!!我已经尝试了4种不同的方式,只存储UI请求,然后如果不在列表中自动更新方法。

所有Update方法都是更新UI使用的数据库。然后每5分钟一次,UI加载新数据库。

先感谢您!!

c# .net windows
1个回答
0
投票

许多响应可能是迭代与基于集合的编码样式的症状。如果涉及到Linq2SQL或EF,我会检查以确保正在使用急切加载(或强制使用.ToList()或.AsEnumerable()进行早期评估,同时避免使用.AsQueryable())。

© www.soinside.com 2019 - 2024. All rights reserved.