Translate

ebook【Delphi跨平台資料庫程式設計火速上手】電子書出版 (CHT)

Delphi 跨平台資料庫程式設計火速上手,是本關於整合 Delphi 的跨平台技術打造 2-Tier 架構的跨平台 APP 的入門技術書。 全書沒有需要理解的技術知識,只講套路。 力求短時間把製作 APP 的工法熟悉,未來要開發其它的應用程式也能舉一反三。 底下...

2013/08/19

Dbexpress driver is Thread Safe?

這陣子在為Dbexpress Driver for SQL Server的選擇在測試著,進行到Debug DataSetProvider.OnBeforeUpdateRecord事件時,卻意外的發現各家的Driver在對Thread使用上的處理都不盡相同,於是做了點小小的研究。


EMBT's Dbexpress driver for SQL SERVER:
特性:條件被動式的Thread Safe。
說明:
EMBT自製的DBX Driver一直都很妙,在Bug和穩定性間都能維持一個絕佳的平衡點。 (笑)
手冊上對Thread應用是這麼寫的:
1.VCL Application不需要另外呼叫CoInitializeCoUninitialize,因為EMBT已經很好心的寫在framework中 (VCL applications take care of these calls for you, so VCL applications do not require calling CoInitialize and CoUninitialize.)
2.Console Application一定要自己呼叫ConInitializeCoUninitialize,不然在呼叫App時系統會直接送你一個Error啦。

***這條件不查手冊永遠都不會知道的……偏偏這方面的資料幾乎為 0 ......

Open Dbexpress for SQL SERVER:
特性:主動式的Thread Safe。
說明:
因為直接依賴ODBC Library本身的功能,所以Developer必須了解對應的Library有沒有Thread Safe的處理。
OleDB:基於COM的實作,所以必需自行加入CoInitialize 和 CoUninitialize
SQL Native Client: 基於.NET,所以.NET會自動處理Thread Safe (.NET太棒啦!)

***不過如果沒CoInitialize/CoUninitialize時程式也是正常運作,就等著讓Application爆了再說。(喂喂……)

Devart Dbexpress driver for SQL SERVER:
特性:智慧型的Thread Safe。
說明:
Devart公司所開發的DBX Driver是基於COM的產品,也是唯一仍然使用COM開發DBX Driver的廠商。完全相容OleDB和SQL Native Client模式,也應該是最高效的Driver了!

實作上,在Main Thread中,完全不需要CoInitialize/CoUninitialize,程式一切正常。
在Other SubThread操作DBX元件(TSQLQuery/TSQLTable/TSQLDataSet...etc)時,如果沒加上CoInitialize/CoUninitialize,Driver會很貼心的訊息提醒Developer:
貼心的開發提示

*****所以開發上常忽略的地方得以藉由三方廠商的支援得以更佳周全。所以一定要推Devart一下的啦!

以上便是Eden小小的研究心得 ^___^


沒有留言:

張貼留言