图片队列
采集线程把图放进队列,推理线程取出后 InferImage。会话在推理侧只开一次。
没有「一次传入整个队列」的 API。队列是调用方的,SDK 每次仍是一张图。
完整示例
using System.Threading.Channels;
using Darra.AI.Runtime;
var channel = Channel.CreateBounded<byte[]>(new BoundedChannelOptions(32)
{
FullMode = BoundedChannelFullMode.Wait,
});
AiRuntime.Ensure("cpu-only");
using var session = AiSession.Open("inspect.darmodel", keyPath: "inspect.darmkey");
var producer = Task.Run(async () =>
{
foreach (string path in Directory.EnumerateFiles(@"D:\inbox", "*.jpg"))
{
await channel.Writer.WriteAsync(File.ReadAllBytes(path));
}
channel.Writer.Complete();
});
var consumer = Task.Run(async () =>
{
await foreach (byte[] jpg in channel.Reader.ReadAllAsync())
{
string json = session.InferImage(jpg, ImageDesc.Auto());
HandleResult(json);
}
});
await Task.WhenAll(producer, consumer);
有界队列容量 32 是示例,不是 SDK 上限。积压多少由现场内存决定。
要点
- 生产者不要调用 SDK。
- 消费者持有会话;
Dispose等consumer结束。 - 多消费者见 并行推理。