解決ArcEngine開發程式「假死」現象

2022-03-11 09:13:10 字數 1247 閱讀 3312

在gis資料處理中,資料量大是乙個非常傷腦筋的問題。最近,在寫乙個cad註記轉shapefile檔案時,又遇到這個問題。

曾經處理一次資料,達130萬個點,即測試區域內的柵格轉成點全部處理,程式是寫好了,但速度之慢啊,關鍵問題是處理到一半報奇怪的錯誤,最後只好將資料分成6份,去實驗室開了6臺機子來分別處理,最後合成在一起。

經歷過這件事後,我就去請教老師,他們在用程式處理gis大資料時(特別是當資料帶有空間資訊),怎麼來解決類似的問題?他總結了兩方面:一是硬體上,配置要高,對於特別大的資料考慮使用工作站或伺服器來處理,gis處理本來就是容易遇到這種情況;二是**上,要不斷優化,不該new的就不要new,能省則省,寫出比較節約記憶體和空間的**,需要不斷的積累和學習。

對於使用者來說,他們絕對不能容忍「假死現象」,一點選「提交」程式介面就卡住了,如果強行進拖動介面容易出現未響應,直到程式關閉。

由於自己非計算機專業出身,對這類問題是束手無策,網上的解決方案是多執行緒,於是我嘗試去這樣做:

thread mythreadone = new thread(new threadstart(main));

mythreadone.name = "cadtoshapethread";

mythreadone.isbackground = true;

mythreadone.start();

將原來直接寫的**放在乙個main函式中,然後新建乙個thread呼叫main,執行結果就好多了,程式介面可以拖動了,資料在後台處理。但由於不懂執行緒和程序,其安全問題也需要解決,要好好研究一下這個神奇的東西。

為了讓使用者知道程式還在處理,還沒有結果,得加乙個進度條:當程序開始時,進度條出現,並不斷滾動顯示;當程序結束時,進度條隱藏。

/// /// 設定控制項引數

///

/// 控制項

/// 引數名稱

/// 引數值

delegate void setcontrolvaluecallback(control ocontrol, string propname, object propvalue);

private void setcontrolpropertyvalue(control ocontrol, string propname, object propvalue)

); }

else}}

}

ArcEngine開發程式中關閉時記憶體洩漏的問題

arcengine開發程式中關閉時記憶體洩漏的問題 一 ae9.0和9.1中解決辦法 在ae9.0和9.1中,就出現了arcengine開發程式中關閉時記憶體洩漏的問題,彈出個錯誤,讓人十分不爽.後來查詢相關資料,需要在關閉窗體時,加乙個函式。void frmmain closing object ...

arcEngine開發之IMapControl介面

imapcontrol介面最重要的是包含imap屬性,還提供另外的屬性用於 管理一般的外觀顯示,管理圖層,載入地 檔以及跟蹤在介面上顯示的圖形。小知識點 一般乙個介面的最新實現是 default 如果有多個實現,是通過數字區分,數字越大,其版本也越新。1.iactiveview 2.extent 和...

arc engine開發遇到問題

基於教材 arcgis engine地理資訊系統開發教程 基於c net 牟乃夏主編 問題1 隨書附盤chp03.rar中引用顯示黃色嘆號 解決方法 選中引用,將其特定版本屬性改為false。問題2 繫結lisence問題 解決方法 隨書附盤中program.cs仍然需要新增繫結lisence 問題...