在GIS資料進行中,資料量大是一個非常傷腦筋的問題。最近,在寫一個CAD注記轉Shapefile檔案時,又遇到這個問題。
曾經處理一次資料,達130萬個點,即測試區域内的栅格轉成點全部處理,程式是寫好了,但速度之慢啊,關鍵問題是處理到一半報奇怪的錯誤,最後隻好将資料分成6份,去實驗室開了6台機子來分别處理,最後合成在一起。經曆過這件事後,我就去請教老師,他們在用程式處理GIS大資料時(特别是當資料帶有空間資訊),怎麼來解決類似的問題?他總結了兩方面:一是硬體上,配置要高,對于特别大的資料考慮使用工作站或伺服器來處理,GIS處理本來就是容易遇到這種情況;二是代碼上,要不斷優化,不該new的就不要new,能省則省,寫出比較節約記憶體和空間的代碼,需要不斷的積累和學習。
對于使用者來說,他們絕對不能容忍“假死現象”,一點選“送出”程式界面就卡住了,如果強行進拖動界面容易出現未響應,直到程式關閉。
由于自己非計算機專業出身,對這類問題是束手無策,網上的解決方案是多線程,于是我嘗試去這樣做:
将原來直接寫的代碼放在一個Main函數中,然後建立一個Thread調用Main,執行結果就好多了,程式界面可以拖動了,資料在背景處理。但由于不懂線程和程序,其安全問題也需要解決,要好好研究一下這個神奇的東西。

為了讓使用者知道程式還在處理,還沒有結果,得加一個進度條:當程序開始時,進度條出現,并不斷滾動顯示;當程序結束時,進度條隐藏。
但我在程序中通路設定進度條的屬性失敗了,報錯:"Cross-thread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on."百度說,這樣是不安全的,要用委托來解決,委托?又搞不懂了,得惡補呀。下面是最終解決方案: