1

それで私はオンラインで検索しました、そして私が得たほとんどの答えはExcelに並行性がないと言いました。しかし、一部の投稿では、EXCEL2007は計算を高速化するためのマルチスレッドを提供していると述べています。私は本当に混乱しています、それは可能かどうか?

私のワークブックには、ユーザー定義関数を使用して計算されるセルがいくつかあります。これらのセルは、RTDサーバーを介して1秒に1回更新されます。つまり、これらの関数は並列に再計算されているように見えますが、実際には、Excelはそれらを順番にスケジュールするだけですか?コンピューターに複数のコアがあるかどうかに違いはありますか?

実際、これらの関数が順番に実行されている場合、次の2つは同等ですか?パフォーマンスと速度の面で。

1)

cell1 = userFunc(1, switch1)
cell2 = userFunc(2, switch2)
cell3 = userFunc(2, switch3)

および2)

cell = func()

where func() is

public function
        if(switch1)  call userfunc1
        if(switch2)  call userfunc2
        ....

end function

そして、関数に必要なすべての調整が行われたと仮定しましょう。つまり、最初のものの方が速いでしょうか?

どうもありがとう!!!

更新:VBAに実際の同時実行性がない場合、それは関数が順番に呼び出され、ロックの問題なしに共有グローバル変数にアクセスできることを意味しますか?事実上すべての関数で使用されるAPIオブジェクトがあるので、使用するたびに初期化するのではなく、共有できますか?このオブジェクトは、いくつかの静的関数を呼び出すために使用される単なるAPIであり、オブジェクト自体に変更や変更はありません。

4

1 に答える 1

1

はい、Excel 2007 以降のバージョンでは、複数のコアを使用したマルチスレッド計算がサポートされていますが、Tim が言うように、VBA を使用してマルチスレッド UDF を作成することはできません。

UDF のパフォーマンスを向上させるには、XLL インターフェイスを使用し、マルチスレッドを活用する必要があります。

Excel DNA (無料) または Addin Express (有料) を使用して、.NET C# または VB.Net でマルチスレッド XLL UDF を作成できます。
VSTO は UDF をサポートしておらず、.Net 自動化 UDF は非常に遅い
C++ XLL UDF の場合、Planatech XLL+ をお勧めします。

于 2013-02-04T10:55:33.110 に答える