生产者/消费者未产生预期的结果

时间:2019-07-09 15:32:38

标签: c# producer-consumer

我已经编写了这样的生产者/消费者代码,该代码应生成大文件并填充随机数据

<?xml version="1.0" encoding="UTF-8"?>
<persistence
        version="2.1"
        xmlns="http://xmlns.jcp.org/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="case-consumer-persistence">
        <class>dao.converter.DateToLongConverter</class>
        <class>aClass</class>
    </persistence-unit>
</persistence>

它可以完成预期的工作。但是由于某种未知的原因,它只能产生约550000个字符串,而不是100万个字符串,我不明白为什么会这样。

有人可以指出我的错误吗?我真的不明白这段代码有什么问题。

1 个答案:

答案 0 :(得分:2)

缓冲区

 String[] block = new string[arrSize];

在Lambda之外声明。这意味着它将被捕获并重新使用。

通常不会引起注意(您只会写出错误随机数据),但是由于您的if (blockNum < arrSize - 1)被放置在for循环中,因此您经常将null写入共享缓冲区。

锻炼,而不是:

block[blockNum] = random.Next().ToString();

使用

block[blockNum] = i.ToString();

并预测和验证结果。