掲示板一覧   -   トピック一覧
   EA API
     自作アドインの仮死状態について


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2010-1-29 15:54

自作アドインの仮死状態について

こんにちは、

自作のアドインでは、困っている処があります。
問題はアドイン処理に、EAのAPIをいっぱい呼び出しています。
ソースの例としては:
If ItemName = "要素の追加" Then
For i As Integer = 0 To 300
Dim newElement As EA.Element = obj.Elements.AddNew("Element_" & i, "Class")
newElement.Update()
obj.Update()
Next
End If
それで、動作はとても重いです。仮死の状態になりそうです。
そちらでは、この問題を解決する方法がありませんか。
あれば、教えていただけませんか。
tkouno
投稿日時: 2010-1-29 16:00
EA Administrator
投稿: 3939

Re: 自作アドインの仮死状態について

Enterprise ArchitectのAPIは、ご指摘のような一括処理を
行うと、大きな負荷がかかります。

この場合、以下のいずれか、あるいは両方の値を
変更して、お試しください。

Repository.BatchAppend
→今回の場合には効果があるのではないかと思います。

Repository.EnableUIUpdates
→これも、今回の例では効果がありそうです。



なお、サンプルとしてご提示いただきましたソースでは
obj.Update()
は不要のように思います。
(もし、サンプルの内容に含まれない範囲で、処理を行っていなければ)

このUpdateのように、不要な処理を行わないことも、大きな改善に
つながります。

例えば、

For i=0 To collection.Count

のような場合には、collection.Countの値を変数に入れておくと
処理速度が改善します。

ご参考になりましたら幸いです。
未登録ゲスト
投稿日時: 2010-1-29 17:32

Re: 自作アドインの仮死状態について

ご回答ありがとうございます。
スピードは結構改善しましたね。

仮死の状態になる事って、どのように改善したほうがいいですか。
こちらで考えると、「プロセスバー」用のスレッドを新規したら改善できるかもしれません。

しかしながら、心配する事はEAのプロセスが仮死の状態になったら、全てのスレッドも仮死になりそうです。
これに関するを聞きたいです。

以上、よろしくお願いいたします。

tkouno
投稿日時: 2010-1-29 17:38
EA Administrator
投稿: 3939

Re: 自作アドインの仮死状態について

ご確認ありがとうございました。
改善したとのことで、安心しました。

追加のご質問の件ですが、アドイン自体は
Enterprise Architect本体と同じスレッドで動作していますので
アドインの処理が遅い場合には、Enterprise Architectごと
「仮死」の状態になります。
ただし、別のスレッドを起こせば、そのスレッドは
動作することは可能だと思います。

ご検討のように、スレッドを起こして、別スレッド側で
何かの情報提供をする方法は、一つの良い解決策ではないかと
思います。


実装の一例として、Enterprise Architectを起動すると表示される
「ワンポイントテクニック」は、アドイン内部でスレッドを起動し
別スレッド側で、テクニック情報を表示しています。

こうすることにより、テクニック情報を表示している間にも
Enterprise Architectの起動処理が裏で行われています。

スレッドを作成せず表示した場合には、ユーザーがテクニック情報の
ダイアログを閉じるまでの間、起動処理は中断されています。

ご参考になりましたら幸いです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ