You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#异步场景下Queue存储字符串数组重复问题排查

问题原因分析

1. 队列全是最后一组数据的原因

string[]是引用类型,你在ReadFromDB3方法的循环外部只创建了一个数组实例:string[] arr = new string[8];。后续每次循环只是修改这个数组里的元素值,然后把这个数组的引用传入dt.WrToBuffer3(arr)加入队列。队列里存储的全是同一个数组的引用,当最后一次循环修改完数组内容后,所有队列元素指向的都是这个被最后一次修改的数组,所以看起来全是最后一组数据。

2. 内存持续扩容的原因

虽然每次加入队列的是同一个数组引用,但Queue会把这个引用作为新元素持续添加,队列的元素数量随着循环次数不断增加,对应的内存也就持续扩容——本质是队列里存了N个指向同一数组的重复引用,而非N个独立的数组实例。

快速修复方案

把数组的创建放到循环内部,每次循环生成新的数组实例:

while (dataReader.Read())
{
    // 每次循环创建新的数组,避免复用同一引用
    string[] arr = new string[8];
    arr[0] = dataReader[0].ToString();
    arr[1] = dataReader[1].ToString();
    arr[2] = dataReader[2].ToString();
    arr[3] = dataReader[3].ToString();
    arr[4] = dataReader[4].ToString();
    arr[5] = dataReader[5].ToString();
    arr[6] = dataReader[6].ToString();
    arr[7] = dataReader[7].ToString();

    dt.WrToBuffer3(arr);
    Thread.Sleep(10);
}

内容的提问来源于stack exchange,提问作者Maher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:30:50