dbTalk Databases Forums  

Why won't DSO multi-thread ???

microsoft.public.sqlserver.olap microsoft.public.sqlserver.olap


Discuss Why won't DSO multi-thread ??? in the microsoft.public.sqlserver.olap forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Al
 
Posts: n/a

Default Why won't DSO multi-thread ??? - 03-14-2006 , 03:46 AM






Hi,

I've written a little app, in C# with the 1.1 .Net Framwork, to process
partitions. It can use multiple threads to connect to the same AS2000
database and process the partitions. The work list is divided up between the
thread instances before they are started, so we know they are not blocking
each other. And any given cube is not processed by more than 1 thread.

When we run with 2 threads, on a 2 CPU machine, our through-put drops by 30%.
If we run 2 instances of the APP, with 1 thread each, our through-put goes
up by 30%.

It seems that clsPartition.Processs method is the sticking point, although
each thread has it's own instance. Is this something to with the properties
of the clsPartition class?

Reply With Quote
  #2  
Old   
Vladimir Chtepa
 
Posts: n/a

Default Re: Why won't DSO multi-thread ??? - 03-14-2006 , 08:26 AM






Hi,

Do you set MTA/STA attribute respectively?
Do you open connection with server in the same thread as it used?

IMHO, it is better to use multiple processes to interoperate with COM-world
(DSO) definitively from one thread. (I make so too).

Vladimir

"Al" <Al (AT) discussions (DOT) microsoft.com> schrieb im Newsbeitrag
news:C0A65E28-1151-4163-B10F-996BC47FFD2B (AT) microsoft (DOT) com...
Quote:
Hi,

I've written a little app, in C# with the 1.1 .Net Framwork, to process
partitions. It can use multiple threads to connect to the same AS2000
database and process the partitions. The work list is divided up between
the
thread instances before they are started, so we know they are not blocking
each other. And any given cube is not processed by more than 1 thread.

When we run with 2 threads, on a 2 CPU machine, our through-put drops by
30%.
If we run 2 instances of the APP, with 1 thread each, our through-put goes
up by 30%.

It seems that clsPartition.Processs method is the sticking point, although
each thread has it's own instance. Is this something to with the
properties
of the clsPartition class?



Reply With Quote
  #3  
Old   
Steve G
 
Posts: n/a

Default RE: Why won't DSO multi-thread ??? - 03-14-2006 , 09:51 AM



If you are trying to process multiple partitions or dimensions in parallel
using .net code which calls AS2K DSO, forget it. DSO is COM, and the code
will serialize in the COM calls even if you create multiple threads from your
own .net code. To do it, you need to create a seperate program (or use the
processpartition.exe utility to do the processing) and then create/launch
multiple processes from your .net code in the background. The .net code can
poll those processes and check when they have completed.

Steve Green

"Al" wrote:

Quote:
Hi,

I've written a little app, in C# with the 1.1 .Net Framwork, to process
partitions. It can use multiple threads to connect to the same AS2000
database and process the partitions. The work list is divided up between the
thread instances before they are started, so we know they are not blocking
each other. And any given cube is not processed by more than 1 thread.

When we run with 2 threads, on a 2 CPU machine, our through-put drops by 30%.
If we run 2 instances of the APP, with 1 thread each, our through-put goes
up by 30%.

It seems that clsPartition.Processs method is the sticking point, although
each thread has it's own instance. Is this something to with the properties
of the clsPartition class?

Reply With Quote
  #4  
Old   
Jéjé
 
Posts: n/a

Default Re: Why won't DSO multi-thread ??? - 03-14-2006 , 05:44 PM



try the parrallel process utility.


"Al" <Al (AT) discussions (DOT) microsoft.com> wrote

Quote:
Hi,

I've written a little app, in C# with the 1.1 .Net Framwork, to process
partitions. It can use multiple threads to connect to the same AS2000
database and process the partitions. The work list is divided up between
the
thread instances before they are started, so we know they are not blocking
each other. And any given cube is not processed by more than 1 thread.

When we run with 2 threads, on a 2 CPU machine, our through-put drops by
30%.
If we run 2 instances of the APP, with 1 thread each, our through-put goes
up by 30%.

It seems that clsPartition.Processs method is the sticking point, although
each thread has it's own instance. Is this something to with the
properties
of the clsPartition class?



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.