Constant GC allocations when sending large messages to threads?

Steven Schveighoffer 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).

-Steve


More information about the Digitalmars-d-learn mailing list