gdbのロックを解除する方法は?


11

ArcGIS10でgdbをリリースするのに問題があります。私のツールはローカルgdbで動作しますが、プロセス後にリリースできませんでした。Ag9.3では、単にMarshal.ReleaseComObject(workspace)でリリースできますが、AG10では機能しません。また、すべてのFeatureCursorsをリリースしても役に立ちません。アプリケーション全体を閉じるだけでロックが「削除」されます。誰かが私のgdbを解放し、アプリケーションを閉じずにロックを「削除」する方法を知っていますか?


このサイトで「ファイルジオデータベースロック」を検索してください。そのうちのいくつかが役立つ場合があります。
チャドクーパー

もちろん前にサイトを検索しました。しかし、残念なことに、どの提案も私を助けてくれませんでした。Compact-GPを試しましたが、これはgdbのロックを解除しませんでした。また、孤立したロックではないようです。これは、アプリケーションを閉じる前にArcCatalogでgdbを編集できないためです。しかし、ワークスペースのリリースに加えて、gdbのロックを解除するためにどのオブジェクトをリリースする必要がありますか?
AnnemieK


1
gis.stackexchange.com/questions/6230/…から、バグに遭遇した可能性があります。以下の回答のいずれにも当てはまらない場合は、Esriの技術サポートでフォローアップを行います。
マットウィルキー

回答:


2

私はすぐに見て、あなたが持っていると思われるロックのシナリオに関する情報を見つけました。ArcObjects 10には、SetWriteLockおよびFreeWriteLockオプションがあります。

EsriのLance Shipmanのサンプル、特にフォーラムリンクを ご覧ください。

楽しんで、CDB


SetWriteLockとFreeWriteLockは、ArcObjectsではなく、FileGeodatabase API(arcobjectsの分離)にあります。このライブラリは、ロックを書き込み/解放できますが、このライブラリで作成されたもののみです。ファイル名のパターンは異なります(コンピューター名などは含まれません)。
mstaessen

2

この条件に到達するのは簡単です-必要なのは、ワークスペースが生き続けるために必要なものへの参照を保持している1つのオブジェクトだけです。たとえば、Featureを保持するカスタムオブジェクトのように。

そのような参照がないことを確認したら、GC.collect()を呼び出して、ガベージコレクターを準決定論的なクリーンアップモードに強制してください。


2

アプリケーションでカーソルを使用している場合は、ComReleaserを使用してカーソルの有効期間を管理し、完了したらカーソルを破棄してください。そうしないと、DBMSがロックされる可能性があります。私は間違っているかもしれませんが、ワークスペースでReleaseComObjectを呼び出すだけではカーソルへの参照が削除されません。このESRIブログ投稿をご覧ください...

http://blogs.esri.com/Dev/blogs/geodatabase/archive/2008/12/18/Using-the-ComReleaser-to-manage-the-lifetime-of-cursors-in-.NET.aspx


0

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000からアイデアを見つけました

「これらの.lockファイルは、ジオプロセシングコンパクトツールを実行するたびに削除されます」

string[] lockfiles = Directory.GetFiles(project.Path, "*.lock",   SearchOption.AllDirectories);

if(lockfiles.Length > 0)
{
int lockCt = 0;
while (lockCt < lockfiles.Length)
{
 string inFGDB = System.IO.Path.GetDirectoryName(lockfiles[lockCt]);

 ESRI.ArcGIS.DataManagementTools.Compact compactProcess = new   ESRI.ArcGIS.DataManagementTools.Compact();

 compactProcess.in_workspace = inFGDB;

 geoprocessor.Execute(compactProcess ,null);

  lockCt++;
}
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.