Re: Invoke garbage collector?

2011-02-10 Thread spir

On 02/09/2011 10:15 PM, Steven Schveighoffer wrote:

On Wed, 09 Feb 2011 15:58:13 -0500, bearophile bearophileh...@lycos.com wrote:


Sean Eskapp:


so is there a way to invoke a GC cleanup in some way?


http://www.digitalmars.com/d/2.0/phobos/core_memory.html#minimize


This attempts to minimize memory, it does not run a collection cycle (I don't
think anyways). To invoke the GC collector, use:

http://www.digitalmars.com/d/2.0/phobos/core_memory.html#collect

-Steve


But won't this blindly run a GC cycle? What if all I want is a given thingy's 
mem to be released, isn't it overkill to call GC.collect?


Denis
--
_
vita es estrany
spir.wikidot.com



Re: Invoke garbage collector?

2011-02-10 Thread Steven Schveighoffer

On Thu, 10 Feb 2011 07:34:53 -0500, spir denis.s...@gmail.com wrote:


On 02/09/2011 10:15 PM, Steven Schveighoffer wrote:
On Wed, 09 Feb 2011 15:58:13 -0500, bearophile  
bearophileh...@lycos.com wrote:



Sean Eskapp:


so is there a way to invoke a GC cleanup in some way?


http://www.digitalmars.com/d/2.0/phobos/core_memory.html#minimize


This attempts to minimize memory, it does not run a collection cycle (I  
don't

think anyways). To invoke the GC collector, use:

http://www.digitalmars.com/d/2.0/phobos/core_memory.html#collect

-Steve


But won't this blindly run a GC cycle? What if all I want is a given  
thingy's mem to be released, isn't it overkill to call GC.collect?


Then you can free it via:  
http://www.digitalmars.com/d/2.0/phobos/core_memory.html#free


The OP's question was how do I run the garbage collector.

-Steve


Re: Invoke garbage collector?

2011-02-10 Thread Johannes Pfau
Sean Eskapp wrote:
I'm having an unfortunate DSFML issue, where failing to free objects
like Images or Sprites causes exceptions to eventually be thrown.
Calling the built-in member dispose() causes access violations, so I
assume it's not for programmer use.

However, I need the resources to be freed more quickly than the GC is
apparently doing (I assume the Images and Sprites are eventually
cleaned up), so is there a way to invoke a GC cleanup in some way?

I don't think that invoking the garbage collector is a good solution in
this case. dispose is indeed defined as protected, so you probably
should not call it manually, but then there really should be a public
dispose like function. The reason for the crashes when calling
dispose manually is simple: dispose calls a c sfml function to release c
resources. The destructor calls dispose again, dispose tries to free an
invalid pointer - crash. So what should probably be done is to define a
private m_disposed member and only call dispose if it hasn't been called
before. Try to add this code to the DSFMLObject class in
dsfml/system/common.d:

-
private:
bool m_disposed = false;

public:
final void releaseRessources() //Needs a better name, though
{
if(m_disposed)
return;
dispose();
m_disposed = true;
}
-

And change dispose() in the DSFmLObject ~this() to releaseRessources();

(Crashes might still occur if dispose is called directly. In the end,
this might need a little more thinking, but that's up to the DSFML
authors ;-))
-- 
Johannes Pfau


signature.asc
Description: PGP signature


Re: Invoke garbage collector?

2011-02-10 Thread Johannes Pfau
Johannes Pfau wrote:
Sean Eskapp wrote:
I'm having an unfortunate DSFML issue, where failing to free objects
like Images or Sprites causes exceptions to eventually be thrown.
Calling the built-in member dispose() causes access violations, so I
assume it's not for programmer use.

However, I need the resources to be freed more quickly than the GC is
apparently doing (I assume the Images and Sprites are eventually
cleaned up), so is there a way to invoke a GC cleanup in some way?

I don't think that invoking the garbage collector is a good solution in
this case. dispose is indeed defined as protected, so you probably
should not call it manually, but then there really should be a public
dispose like function. The reason for the crashes when calling
dispose manually is simple: dispose calls a c sfml function to release
c resources. The destructor calls dispose again, dispose tries to free
an invalid pointer - crash. So what should probably be done is to
define a private m_disposed member and only call dispose if it hasn't
been called before. Try to add this code to the DSFMLObject class in
dsfml/system/common.d:

-
private:
bool m_disposed = false;

public:
final void releaseRessources() //Needs a better name, though
{
if(m_disposed || m_preventDelete)
return;
dispose();
m_disposed = true;
}
-

And change dispose() in the DSFmLObject ~this() to releaseRessources();

(Crashes might still occur if dispose is called directly. In the end,
this might need a little more thinking, but that's up to the DSFML
authors ;-))

The releaseRessources function should also check for m_preventDelete.
Updated in the quote above.
-- 
Johannes Pfau


signature.asc
Description: PGP signature


Invoke garbage collector?

2011-02-09 Thread Sean Eskapp
I'm having an unfortunate DSFML issue, where failing to free objects like
Images or Sprites causes exceptions to eventually be thrown. Calling the
built-in member dispose() causes access violations, so I assume it's not for
programmer use.

However, I need the resources to be freed more quickly than the GC is
apparently doing (I assume the Images and Sprites are eventually cleaned up),
so is there a way to invoke a GC cleanup in some way?


Re: Invoke garbage collector?

2011-02-09 Thread bearophile
Sean Eskapp:

 so is there a way to invoke a GC cleanup in some way?

http://www.digitalmars.com/d/2.0/phobos/core_memory.html#minimize

Bye,
bearophile


Re: Invoke garbage collector?

2011-02-09 Thread Steven Schveighoffer
On Wed, 09 Feb 2011 15:58:13 -0500, bearophile bearophileh...@lycos.com  
wrote:



Sean Eskapp:


so is there a way to invoke a GC cleanup in some way?


http://www.digitalmars.com/d/2.0/phobos/core_memory.html#minimize


This attempts to minimize memory, it does not run a collection cycle (I  
don't think anyways).  To invoke the GC collector, use:


http://www.digitalmars.com/d/2.0/phobos/core_memory.html#collect

-Steve


Re: Invoke garbage collector?

2011-02-09 Thread Trass3r

However, I need the resources to be freed more quickly than the GC is
apparently doing


You could use scoped instances if you need to clean them up soon after  
creation.


Re: Invoke garbage collector? (Scoped Instances)

2011-02-09 Thread Sean Eskapp
== Quote from Trass3r (u...@known.com)'s article
  However, I need the resources to be freed more quickly than the GC is
  apparently doing
 You could use scoped instances if you need to clean them up soon after
 creation.

To my knowledge, these are being removed from the language, and so, could only 
be
used in the short-term.


Re: Invoke garbage collector? (Scoped Instances)

2011-02-09 Thread Jonathan M Davis
On Wednesday 09 February 2011 17:52:47 Sean Eskapp wrote:
 == Quote from Trass3r (u...@known.com)'s article
 
   However, I need the resources to be freed more quickly than the GC is
   apparently doing
  
  You could use scoped instances if you need to clean them up soon after
  creation.
 
 To my knowledge, these are being removed from the language, and so, could
 only be used in the short-term.

Yes. They're inherently unsafe because of the risk of escaped references. 
std.typecons.scoped is intended as an alternative however, if you really want 
it. Personally, I'd generally advise against it unless profiling shows that you 
need it.

- Jonathan M Davis