0

C#-DLLの関数を呼び出すASP .NETMVC2-アプリケーションがあります。

DLL自体はマルチスレッドです。最悪の場合、最大200のスレッドを使用しますが、実行時間はそれほど長くありません。

スレッドを生成するために非同期デリゲートを使用します。デリゲートの初期化を高速化するために、必要なスレッド数を事前に計算してThreadPoolに渡します。

ThreadPool.SetMinThreads(my_num_threads, ...); 

ThreadPoolがスレッドを作成するのに十分な時間があるように、これを十分に早く行う必要があるかどうか疑問に思います。ThreadPoolのサイズを設定するとき、またはSetMinThreadsを呼び出した直後にスレッドが使用可能になるかどうかを考慮する必要がありますか?

さらに、ASP .NET MVCアプリケーションでDLLの外部にサイズを設定した場合(DLLを呼び出す前に)、この設定はDLLで使用可能/表示されますか?

4

1 に答える 1

1

それらは同じアプリケーションドメインを共有するため、ThreadPoolをどこにでも設定するとすべてに影響します。これは、独自の非同期タスクなどすべてにThreadPool自体を使用するASP.NETフレームワークにも影響を与えることに注意してください。

そのことを念頭に置いて、必要なスレッドの最小数がおおよそわかっている場合は、アプリケーションの起動時にそれを設定して、後で使用できるようにすることができます。

ただし、200スレッドはやや過剰に思えます。これをコンテキストに入れると、約8つのタブが開いているChromeでは約35が使用され、SQLServerでは約50が使用されます。そんなに多くのことを要求するあなたは何をしているのですか?

また、サービスが必要なスレッドが非常に多いため、最終的にはパフォーマンスが低下する限界に達することにも注意してください。MicrosoftはMSDNでそのように言っています:

SetMinThreadsメソッドを使用して、スレッドの最小数を増やすことができます。ただし、これらの値を不必要に増やすと、パフォーマンスの問題が発生する可能性があります。同時に開始するタスクが多すぎると、すべてのタスクが遅いように見える場合があります。ほとんどの場合、スレッドプールは、スレッドを割り当てるための独自のアルゴリズムを使用するとパフォーマンスが向上します。最小値をプロセッサの数より少なくすると、パフォーマンスが低下する可能性もあります。

于 2012-11-08T16:43:27.883 に答える