當編譯爲X64平臺的公共語言運行庫支持C++應用程序,並使用它裏面的本地SQLite庫,裏面sqlite3MemRealloc應用程序崩潰,試圖分配大量的內存(大約5GB)。
當同一個應用程序在沒有CLR支持的情況下被編譯時,所需的功能就可以工作,並且不會嘗試分配這些內存量。我用一個條件來判斷這個事實。
數據庫本身是一個小型的800KB文件,我們正試圖運行一個簡單的「select * from XYZ」查詢。試用了我們在我們的代碼庫和最新的sqlite 3.7.14中已有的sqlite 3.7.11。
此問題是一致的。無論我重建應用程序多少次,或者使用某些設置進行播放,CLR支持都會崩潰,而不支持CLR支持。
較長的故事
我試圖開發從C語言編寫的現有代碼庫利用代碼的應用程序+ +,但也充分利用了.NET框架的力量。
我創建了一個與現有代碼鏈接的C++/CLI應用程序(利用它內部的sqlite)。我的代碼不直接使用sqlite。使用sqlite的現有代碼是其餘代碼庫所依賴的本機C++庫。所以我不能輕易觸摸它,因此不能簡單地使用System.Data.Sqlite。
我通過刪除.NET框架的所有依賴關係並創建一個簡單的應用程序,只使用現有的本機代碼而不使用任何.NET框架代碼,並編譯它兩次(帶和不帶CLR支持)來隔離此問題。
Ouch。崩潰是否依賴於數據庫的內容?您是否嘗試過使用'/ clr'編譯只有幾個文件來試圖縮小問題發生的位置? –
是的,我試圖用/ clr只編譯所需的文件。還是一樣。關於依賴 - 我想它依賴於它,但我無法孤立這個問題。我嘗試了很多數據庫在我們公司,它仍然發生。數據庫本身是由我無法控制的公司中的不同部門創建的。 – Alex