C#Winforms.NET framework数据处理

C#Winforms.NET framework数据处理,c#,.net,windows,C#,.net,Windows,我有一个程序,通过使用DataGridView点击一个项目来请求用户输入的数据,并自动请求给定股票符号的新信息。当从api服务器接收数据时,它会排队,后台工作人员处理数据,并通过文本框、图表和各种风险分析更新UI 我写了一个更新序列,更新了股票的热度、利润率和当前价格。这就是我的问题所在。我无法更改服务器的内容,响应仅包含请求id 我尝试将请求id存储到列表中,然后在列表中搜索以确定它是用户输入还是更新序列。通过这样做,我可以在我的一端添加一个标记,告诉应用程序将数据发送到哪里进行处理。然而,这

我有一个程序,通过使用DataGridView点击一个项目来请求用户输入的数据,并自动请求给定股票符号的新信息。当从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();和存储的_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秒。这是在工作人员完成从存储列表中删除requestID的工作之后

每次启动更新序列时,它都会在15秒内收到8000个响应

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

任何建议都会有帮助!!我尝试了4种不同的方法,只存储UI请求,如果不在列表中,则自动使用更新方法

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


提前谢谢你

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

我在xml数据库中有3750个股票符号,它接收报价和条历史数据,以使用当前价格、开放、高、低、容量完全更新数据库。如果一个失败,它将收到3个响应,但数据处理失败并添加到日志中。每个股票都由一个foreach从datagridview中单独调用。我已经查过了。我运行了3次更新序列,并将所有响应存储到一个单独的gridview中,并保存到xml中以供手动分析。我将向队列工作人员添加另一个后台工作人员,并查看其作用。目前有5名工人正在推动60%的cpu使用率。再添加一个,我的cpu使用率将提高到70%,并将减少几秒钟。这就是我被发现添加错误日志方法的原因。非常好的建议!!非常感谢。我可以通过只存储用户界面的请求ID来修复它,减少了超过300mB的内存使用量,加快了用户界面的速度。我曾经使用过:if(Split[1]!=storaged_ID.){//Update method queue}UI现在是完全响应的,所需时间不到2秒。显示数据。如果使用正确,一个简单的迭代可以做什么。基本上将这个迭代移动到序列的开始。