max发生用于从传入消息中分批消息,而不是确定输出消息中应该有多少记录。因此,您必须创建一个自定义平面文件反汇编器组件,该组件以批处理方式读取传入文件:从流中读取一些数据(例如,基于行数)并将其传递。
GetNext 方法读取较大文件中数据的方式似乎存在问题,这可能会导致内存使用过多(我曾遇到过这种情况,其中包含大约 800 000 个行项目的 10Mb 文件)。因此,您需要做的就是重新实现 GetNext 方法,以满足您在每条消息中输出一定数量记录的场景,同时更高效地处理更大的消息。
这里是部分原始GetNext(重要部分)方法的反编译代码:
private IBaseMessage GetNext2(IPipelineContext pc)
{
...
baseMessage = this.CreateOutputMessage(pc);
...
baseMessage = this.CreateOutputMessage(pc);
...
return baseMessage;
}
“CreateOutputMessage”方法最终调用“CreateNonrecoverableOutputMessage”方法,这似乎是处理较大消息时的问题所在:
internal IBaseMessage CreateNonrecoverableOutputMessage(IPipelineContext pc)
{
...
XmlReader reader1 = this.m_docspec.Parse(this.m_inputData);
...
return message;
}
“m_inputData”变量是通过调用“FFDasmComp.DataReaderFunction”委托而创建的,该委托传递到平面文件反汇编器组件的构造函数中。您可以通过将自己的数据读取器方法传递到平面文件反汇编器组件的自定义实现的构造函数来控制数据的读取。
那里有几篇文章,但是在处理较大的消息时,给定的实现有一些严重的警告:
Debatching Large Messages and Extending Flatfile Pipeline Disassembler Component in Biztalk 2006
Processing 10 MB Flat File in BizTalk