GC finalizer optimization.
Dave
Dave_member at pathlink.com
Tue Apr 11 09:19:26 PDT 2006
Comments? Like, how can this break things?
By changing line 129 of phobos/internal/gc/gc.d from:
_gc.setFinalizer(p, &new_finalizer);
to:
///_gc.setFinalizer(p, &new_finalizer);
///
ClassInfo c = ci;
do
{
if (c.destructor)
{
_gc.setFinalizer(p, &new_finalizer);
}
c = c.base;
} while (c);
///
gives me about 3x performance in allocating class objects w/o a dtor
using the following code.
Before:
D::~this
C::~this
C::~this
0.829
After:
D::~this
C::~this
C::~this
0.258
;---
import std.date, std.stdio;
void main()
{
C c = new C;
D d = new D;
E e;
F f;
d_time st = getUTCtime();
for(int i = 0; i < 1_000_000; i++)
{
e = new E;
f = new F;
}
d_time et = getUTCtime();
writefln((et - st) / cast(double)TicksPerSecond);
}
class C
{
int i;
~this()
{
printf("C::~this\n");
}
}
class D : C
{
int i;
~this()
{
printf("D::~this\n");
}
}
class E
{
int i;
}
class F : E
{
int i;
}
Thanks,
- Dave
More information about the Digitalmars-d
mailing list