2

私は1つのDXLの問題で立ち往生しており、助けてくれて本当に感謝しています。多くのモジュールでリンクを作成する必要があるため、編集モードでそれらを開く必要があります。ただし、一度に編集モードで開くと、2GBを超えるDOORSのメモリが使用されます。そこで、それぞれを編集モードで開いてリンクを作成してから、ダウングレードして読み取り専用モードにすることにしました。ただし、この方法でもメモリは解放されません。

編集モードによって引き起こされたメモリを解放する方法はありますか?

助けてくれてありがとう。

4

3 に答える 3

1

リンクの追加が完了したら、ループ内のモジュールを保存して閉じることができます。

Folder f = current
Item i
Module mod

for i in f do
{
  if(type(i) "" == "Formal")
  {
    mod = edit(fullName(i) "", false)

    //process and add links here

    save mod
    close mod
  }
}

モジュールを閉じるとリソースが解放されますが、これはあなたが探しているものではないかもしれません。そうでない場合は、プログラムで何をしようとしているのかを説明してください。

于 2012-08-29T19:04:59.527 に答える
0

問題を回避する最良のチャンスは、一度に開くモジュールをできるだけ少なくし、終了したら閉じることです。2つのモジュールがすでにすべてのメモリを消費しているためにこれで問題が解決しない場合は、64ビットOSおよびDOORSクライアント(使用可能な場合)に切り替えて、4、8、または16GBのRAMにアップグレードできます。

ところで:DOORSのメモリ消費はお尻の痛みです;-)私はDOORSの古いバージョン(8.3)用にかなり多くのDXLスクリプトを開発しました、そして多くの文字列を持つ複雑なスクリプトはメモリ消費を悪化させるかもしれません。したがって、スクリプトによって直接または間接的に実行されるすべてのDXLスクリプトで発生する可能性のあるメモリリークを検索することをお勧めします。ほとんどのDOORSモジュールには、対応するモジュールが閉じられた場合に解放されないメモリ割り当てを引き起こす可能性のあるDXL属性または列が含まれています。

于 2012-11-08T13:40:44.790 に答える
0

したがって、開いているモジュールで Array を宣言し、最後に閉じます。

int sizeOfOpenModules = 0
Array openModules = create (1,1)

新しいモジュールを開くと、次のようになります。

 put (openModules, m, 1, sizeOfOpenModules)

開いているモジュールの 1 つを取得する場合:

Module m = (Module get (openModules, 1, i))

そして最後に:

void closeAllOpenModules () {
    for (i = 0; i < sizeOfOpenModules; i++) {
        Module m = get (openModules, 1, i)
        save (m)
        close (m)
    }
}
于 2015-12-28T11:26:25.610 に答える