Constant GC allocations when sending large messages to threads?
schveiguy at gmail.com
Fri Jan 31 15:47:26 UTC 2020
On 1/31/20 2:14 AM, cc wrote:
> On Wednesday, 29 January 2020 at 21:10:53 UTC, Steven Schveighoffer wrote:
>> I'm pretty sure std.concurrency uses Variant to pass message data,
>> which boxes when it gets over a certain size. You are probably
>> crossing that threshold.
>> The allocations should level out eventually when the GC starts
>> collecting them.
> Is there a way to pre-allocate a buffer or something to be used? Ideally
> I'd like to avoid too many garbage collections happening, in my
> application these thread messages happen almost every frame and are
> quickly adding up to 100s of kilobytes in allocations every few seconds.
You could use RefCounted to build a struct that then is sendable with
the data you need. RefCounted allocates using C malloc, not the GC.
It might actually be reasonable to modify std.concurrency to use
RefCounted instead of GC memory (i.e. it needs to be a specialized Variant).
More information about the Digitalmars-d-learn