大果子你说谁呢 2023-10-11 16:32 采纳率: 35.7%
浏览 20
已结题

c# List<string>遍历的大数据集合,进行for循环,怎么多线程加速循环速率

c# List遍历的大数据集合,进行for循环,怎么进行多线程加速循环速率

var lists = new List<List<string>>();//lists
List<xxWindow> ItemList = new List<xxWindow>();
for (int m = 0; m < lists.Count; m++)
{
StringBuilder stringBuilder = new StringBuilder();
datetime = SetTS(lists[m][0]).ToString();
dir = lists[m][1];
cde = lists[m][2];
cdename = lists[m][3];
for (int n = 5; n < lists[m].Count; n++)
{
stringBuilder.Append(lists[m][n]).Append("\n");
text = stringBuilder.ToString();
}
ItemList.Add(new xxWindow()
{
Datetime = datetime,
CdeName = cdename,
Cde = cde,
Direction = dir,
Text = text
});
}
dataGrid.ItemsSource = null;
dataGrid.ItemsSource = ItemList;

  • 写回答

2条回答 默认 最新

  • 自在猫先生 2023-10-11 16:42
    关注

    该回答引用于chatGPT仅供参考,如有帮助希望采纳谢谢。

    要在C#中使用多线程加速大数据集合的遍历,您可以将循环迭代的部分放入一个并行化的`Parallel.For`循环中。这样可以让多个线程同时处理不同的列表项,从而提高遍历速率。
    
    以下是修改后的代码示例:
    
    ```csharp
    var lists = new List<List<string>>(); // lists
    List<xxWindow> ItemList = new List<xxWindow>();
    
    Parallel.For(0, lists.Count, m =>
    {
        StringBuilder stringBuilder = new StringBuilder();
        string datetime = SetTS(lists[m][0]).ToString();
        string dir = lists[m][1];
        string cde = lists[m][2];
        string cdename = lists[m][3];
    
        for (int n = 5; n < lists[m].Count; n++)
        {
            stringBuilder.Append(lists[m][n]).Append("\n");
        }
    
        string text = stringBuilder.ToString();
    
        lock (ItemList)
        {
            ItemList.Add(new xxWindow()
            {
                Datetime = datetime,
                CdeName = cdename,
                Cde = cde,
                Direction = dir,
                Text = text
            });
        }
    });
    
    dataGrid.ItemsSource = null;
    dataGrid.ItemsSource = ItemList;
    

    在这个示例中,我们使用了Parallel.For来替代原始的for循环。并行循环会自动将迭代任务分配给可用的线程池线程进行处理。注意,在并行循环内部修改共享变量(如ItemList)时,需要使用lock关键字进行同步操作,以防止竞争条件。

    请确保在使用并行循环之前评估性能需求和硬件资源。并行化处理可能会带来更高的CPU和内存消耗,因此需要权衡利弊。

    ```

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月24日
  • 修改了问题 10月11日
  • 创建了问题 10月11日

悬赏问题

  • ¥20 校园二手交易小程序搭建
  • ¥15 请问在ubuntu用conda创建环境报错怎么能解决
  • ¥15 STM32CubeMX/proteus按键控制指示灯颜色切换
  • ¥20 python,计算区位熵和扩张指数
  • ¥15 Python环境配置
  • ¥15 大四学生的困惑,有偿提问!
  • ¥15 解决页面无法编入索引:被“noindex”标签排除的问题?
  • ¥15 arduino测量电阻
  • ¥15 快手uid转快手号谁能解决 需要开发
  • ¥15 iis部署Django时css不生效,来个真人,ai不好使