467,915 Members | 1,586 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,915 developers. It's quick & easy.

COM+ pool object in C# is not return to the pool

Hi All:

I am creating a COM+ Pool object in C#. I set up the following attributes:
JIT (true),Pool size; and at the end of each public method I called
ContextUtil.DeactivateOnReturn=true to set DONE flag; and also I override
CanBeBooled method to true.

In my calling program in C#, first of all I am using NEW to create a object,
then I call the method then I call dispose.

No matter how I try I do not see the object has been released back to pool.
Does anyone have similar problem ?

Thanks in advance
Nov 17 '05 #1
  • viewed: 2719
Share:
5 Replies
You should attach the AutoComplete attribute to every method that you
expose. This is needed to release the object back to the pool.

Also, don't call Dispose on your object. This has the effect of pulling
an object from the pool, activating it, and then releasing it back to the
pool. It's a wasted call.

If you use the AutoComplete attribute, you don't need to set the
DeactivateOnReturn property.

If you want to have dispose semantics on a JIT activated object, then
you need to override the Activate and Deactivate methods on your component
based on ServicedComponent.

Additionally, if the component is not JIT activated, then you would need
to call Dispose to release it back to the pool. When it is JIT activated,
then the object is pulled from the pool and activated before every call.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:5B**********************************@microsof t.com...
Hi All:

I am creating a COM+ Pool object in C#. I set up the following attributes:
JIT (true),Pool size; and at the end of each public method I called
ContextUtil.DeactivateOnReturn=true to set DONE flag; and also I override
CanBeBooled method to true.

In my calling program in C#, first of all I am using NEW to create a
object,
then I call the method then I call dispose.

No matter how I try I do not see the object has been released back to
pool.
Does anyone have similar problem ?

Thanks in advance

Nov 17 '05 #2
I tried AutoComplete attribute and comment out DeactivateOnReturn code in my
public method.

In additon, since COM+ pool object is JIT. I override Activate and Deactive
method with code like base.Activate and base.Deactive.

Here is calling routine:
.....
using (CommandCenter myPool = new CommandCenter())
{
sRet = myPool.GetSybaseODBCConnection
("insightdb","nyns0608");
}
.....
and I still do not see object is return to the pool.
"Nicholas Paldino [.NET/C# MVP]" wrote:
You should attach the AutoComplete attribute to every method that you
expose. This is needed to release the object back to the pool.

Also, don't call Dispose on your object. This has the effect of pulling
an object from the pool, activating it, and then releasing it back to the
pool. It's a wasted call.

If you use the AutoComplete attribute, you don't need to set the
DeactivateOnReturn property.

If you want to have dispose semantics on a JIT activated object, then
you need to override the Activate and Deactivate methods on your component
based on ServicedComponent.

Additionally, if the component is not JIT activated, then you would need
to call Dispose to release it back to the pool. When it is JIT activated,
then the object is pulled from the pool and activated before every call.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:5B**********************************@microsof t.com...
Hi All:

I am creating a COM+ Pool object in C#. I set up the following attributes:
JIT (true),Pool size; and at the end of each public method I called
ContextUtil.DeactivateOnReturn=true to set DONE flag; and also I override
CanBeBooled method to true.

In my calling program in C#, first of all I am using NEW to create a
object,
then I call the method then I call dispose.

No matter how I try I do not see the object has been released back to
pool.
Does anyone have similar problem ?

Thanks in advance


Nov 17 '05 #3
How are you making the determination that the object is getting returned
to the pool?

Also, is CommandCenter your serviced component? If so, you should NOT
be using it in a using statement, and you should NOT call dispose on it
(since it is JIT activated and pooled).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:12**********************************@microsof t.com...
I tried AutoComplete attribute and comment out DeactivateOnReturn code in
my
public method.

In additon, since COM+ pool object is JIT. I override Activate and
Deactive
method with code like base.Activate and base.Deactive.

Here is calling routine:
....
using (CommandCenter myPool = new CommandCenter())
{
sRet = myPool.GetSybaseODBCConnection
("insightdb","nyns0608");
}
....
and I still do not see object is return to the pool.
"Nicholas Paldino [.NET/C# MVP]" wrote:
You should attach the AutoComplete attribute to every method that you
expose. This is needed to release the object back to the pool.

Also, don't call Dispose on your object. This has the effect of
pulling
an object from the pool, activating it, and then releasing it back to the
pool. It's a wasted call.

If you use the AutoComplete attribute, you don't need to set the
DeactivateOnReturn property.

If you want to have dispose semantics on a JIT activated object, then
you need to override the Activate and Deactivate methods on your
component
based on ServicedComponent.

Additionally, if the component is not JIT activated, then you would
need
to call Dispose to release it back to the pool. When it is JIT
activated,
then the object is pulled from the pool and activated before every call.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:5B**********************************@microsof t.com...
> Hi All:
>
> I am creating a COM+ Pool object in C#. I set up the following
> attributes:
> JIT (true),Pool size; and at the end of each public method I called
> ContextUtil.DeactivateOnReturn=true to set DONE flag; and also I
> override
> CanBeBooled method to true.
>
> In my calling program in C#, first of all I am using NEW to create a
> object,
> then I call the method then I call dispose.
>
> No matter how I try I do not see the object has been released back to
> pool.
> Does anyone have similar problem ?
>
> Thanks in advance
>
>


Nov 17 '05 #4
two ways: one way is looking at memory useage DllHost is keeping getting
bigger after each client call. The other way is looking at status view on
COM+ managers. There is nothing under Pooled column.

Yes, my commandcenter is serviced component. I was reading somewhere
recommended to use Dispose no matter what.

"Nicholas Paldino [.NET/C# MVP]" wrote:
How are you making the determination that the object is getting returned
to the pool?

Also, is CommandCenter your serviced component? If so, you should NOT
be using it in a using statement, and you should NOT call dispose on it
(since it is JIT activated and pooled).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:12**********************************@microsof t.com...
I tried AutoComplete attribute and comment out DeactivateOnReturn code in
my
public method.

In additon, since COM+ pool object is JIT. I override Activate and
Deactive
method with code like base.Activate and base.Deactive.

Here is calling routine:
....
using (CommandCenter myPool = new CommandCenter())
{
sRet = myPool.GetSybaseODBCConnection
("insightdb","nyns0608");
}
....
and I still do not see object is return to the pool.
"Nicholas Paldino [.NET/C# MVP]" wrote:
You should attach the AutoComplete attribute to every method that you
expose. This is needed to release the object back to the pool.

Also, don't call Dispose on your object. This has the effect of
pulling
an object from the pool, activating it, and then releasing it back to the
pool. It's a wasted call.

If you use the AutoComplete attribute, you don't need to set the
DeactivateOnReturn property.

If you want to have dispose semantics on a JIT activated object, then
you need to override the Activate and Deactivate methods on your
component
based on ServicedComponent.

Additionally, if the component is not JIT activated, then you would
need
to call Dispose to release it back to the pool. When it is JIT
activated,
then the object is pulled from the pool and activated before every call.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:5B**********************************@microsof t.com...
> Hi All:
>
> I am creating a COM+ Pool object in C#. I set up the following
> attributes:
> JIT (true),Pool size; and at the end of each public method I called
> ContextUtil.DeactivateOnReturn=true to set DONE flag; and also I
> override
> CanBeBooled method to true.
>
> In my calling program in C#, first of all I am using NEW to create a
> object,
> then I call the method then I call dispose.
>
> No matter how I try I do not see the object has been released back to
> pool.
> Does anyone have similar problem ?
>
> Thanks in advance
>
>


Nov 17 '05 #5
In this case, no, you can not call Dispose. If you do, you are pulling
a new object from the pool, and then it is being activated (because of JIT),
and then you are calling Dispose, and deactivating the object. It's a waste
of a call.

You aren't saving state across calls to this object, are you? It is
EXTREMELY important that you do not persist state in your objects when you
pool them like this (at least, state that is modified as the result of
calls, state that is created at object construction time which is the same
across all pooled instances is ok).

Also, looking at the memory usage for DllHost isn't going to tell you
anything, since that is just .NET doing what .NET does (to put it simply)
when it comes to memory management and the like. Also, how can you be sure
which DllHost process is yours?

In the Pooled column in the status view, it tells you how many objects
are currently in the pool. It doesn't tell you if objects are not released.

I think your objects really are being pooled correctly, you just think
they arent.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:E6**********************************@microsof t.com...
two ways: one way is looking at memory useage DllHost is keeping getting
bigger after each client call. The other way is looking at status view on
COM+ managers. There is nothing under Pooled column.

Yes, my commandcenter is serviced component. I was reading somewhere
recommended to use Dispose no matter what.

"Nicholas Paldino [.NET/C# MVP]" wrote:
How are you making the determination that the object is getting
returned
to the pool?

Also, is CommandCenter your serviced component? If so, you should
NOT
be using it in a using statement, and you should NOT call dispose on it
(since it is JIT activated and pooled).

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"da*******@opco.com" <da*************@discussions.microsoft.com> wrote in
message news:12**********************************@microsof t.com...
>I tried AutoComplete attribute and comment out DeactivateOnReturn code
>in
>my
> public method.
>
> In additon, since COM+ pool object is JIT. I override Activate and
> Deactive
> method with code like base.Activate and base.Deactive.
>
> Here is calling routine:
> ....
> using (CommandCenter myPool = new CommandCenter())
> {
> sRet = myPool.GetSybaseODBCConnection
> ("insightdb","nyns0608");
> }
> ....
> and I still do not see object is return to the pool.
>
>
> "Nicholas Paldino [.NET/C# MVP]" wrote:
>
>> You should attach the AutoComplete attribute to every method that
>> you
>> expose. This is needed to release the object back to the pool.
>>
>> Also, don't call Dispose on your object. This has the effect of
>> pulling
>> an object from the pool, activating it, and then releasing it back to
>> the
>> pool. It's a wasted call.
>>
>> If you use the AutoComplete attribute, you don't need to set the
>> DeactivateOnReturn property.
>>
>> If you want to have dispose semantics on a JIT activated object,
>> then
>> you need to override the Activate and Deactivate methods on your
>> component
>> based on ServicedComponent.
>>
>> Additionally, if the component is not JIT activated, then you
>> would
>> need
>> to call Dispose to release it back to the pool. When it is JIT
>> activated,
>> then the object is pulled from the pool and activated before every
>> call.
>>
>> Hope this helps.
>>
>>
>> --
>> - Nicholas Paldino [.NET/C# MVP]
>> - mv*@spam.guard.caspershouse.com
>>
>> "da*******@opco.com" <da*************@discussions.microsoft.com> wrote
>> in
>> message news:5B**********************************@microsof t.com...
>> > Hi All:
>> >
>> > I am creating a COM+ Pool object in C#. I set up the following
>> > attributes:
>> > JIT (true),Pool size; and at the end of each public method I called
>> > ContextUtil.DeactivateOnReturn=true to set DONE flag; and also I
>> > override
>> > CanBeBooled method to true.
>> >
>> > In my calling program in C#, first of all I am using NEW to create a
>> > object,
>> > then I call the method then I call dispose.
>> >
>> > No matter how I try I do not see the object has been released back
>> > to
>> > pool.
>> > Does anyone have similar problem ?
>> >
>> > Thanks in advance
>> >
>> >
>>
>>
>>


Nov 17 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Lee Greco | last post: by
5 posts views Thread by Greg | last post: by
11 posts views Thread by Grey Alien | last post: by
5 posts views Thread by =?Utf-8?B?VHJlY2l1cw==?= | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.