粒子内の濃度の数学的モデルを解く必要があり、ExcelのパラメータはUIです。GCはまだ参照されているオブジェクトを収集します
私は、3つのクラスを持つvb.netのdllライブラリを作成しました:Particle、ParticleMix InteropParticleMix。
粒子の性質に基づく粒子は、単純なオイラー法で次のステップで濃度を計算するサブを持っています。
ParticleMixは、パーティクルの辞書を持つクラスで、混合物中の各パーティクルの質量割合を表すdoubleと、プロパティの加重平均を計算するプロパティです。
InteropParticleMixはParticleMixを継承し、作成時に3つのパーティクルを作成し、3つのフィールドに保存します。 Loadと呼ばれるSubでは、3つのパーティクルをディクショナリにそれぞれの分数で追加します。最後に、各粒子の濃度と平均値を配列に保存する単純なオイラー法で次のステップを呼び出すn回ループする関数です。
VBA-excelから、新しいInteropParticleMixを作成し、すべてのプロパティを挿入し、プロットを作成する変数に格納する反復メソッドを呼び出します。
数学と情報の流れはすべて素晴らしいですが、戻り値がナットとなる時間の30%です。配列の最初の要素は常に動作しますが、ランダムなパーティクルはランダムな点で6553500になります。これは、繰り返し中に1つのパーティクルを収集するGCが原因であると仮定しています。この動作は同じ入力パラメータのため、発散または丸めの問題ではありません。
ループの前後、各ループの前後にあるすべてのパーティクルにGC.KeepAliveメソッドが既に使用されています。どんなライト?
どこかのオーバーフローのような匂い。 VB6/VBAの整数はわずか16ビットです。 – helrich
GCはまだ参照されているものを収集していません。 VBがデフォルトでオンになっているため、オーバーフローが発生する可能性はありません。いずれにせよ、あなたのコードの記述は不十分です。 [MCVE]を投稿してください。 –
@helrich私はそれがオーバーフローではないと確信しています。私が言ったように、入力と同じパラメータは異なる出力を返します。私が観測している値はヌル参照です。 –