在我的工作中,我們有各種各樣的大表存儲用於一組多維非參數模型的數據。每個表是一個float
陣列,其大小通常爲200,000至5,000,000個元素。限制使用代碼庫大查詢表在Visual Studio 2010
今天,我要對常瑣碎的更新這個代碼庫,更新了一組查找表的,當我發現編譯和項目的鏈接是導致微軟增量鏈接已停止工作,東西我以前沒見過。請注意,我正在更新的表格正在從約290,000個元素的大小增長到每個元素近10,000,000個元素。
我搜查,發現方法的人建議,以解決與增量鏈接彈出的問題,但沒有固定它。我甚至把這個項目整合到了VS 2012中,並且讓它失敗了。
我知道我的項目之前編譯,所以我刪除了更新,並把它恢復到原來的狀態。這個狀態正確地編譯和鏈接,因爲它一直有。然後,我將其中一箇舊表與其中一個新表交換,並且正確編譯和鏈接。但是,一旦我爲更新後的表格進行了另一次交換,它在編譯後與鏈接有同樣的問題。
如前所述,新的表我都添加了具有約10,000,000元每比他們要更新的舊錶顯著較大。鏈接器正努力與這些大型表一起工作是否可行?如果是這樣,爲什麼呢?
新表編譯細跟的代碼庫,它只是連接步驟失敗。如果表的大小是一個問題,是否有任何建議來處理這個問題,仍然可以保持名義建模和查找表的方法?我承認,從尺寸的角度來看,使用參數化模型會更好,因爲它會壓縮數據,但我的團隊不想在這個時候離開他們的傳統方法。
注意每個表的代碼是沿着這些路線的東西:
頭文件
//
// dataset1.hpp
//
#ifndef dataset1_hpp_
#define dataset1_hpp_
namespace set1 {
extern const int tableSize;
extern const float table[];
}
#endif
源文件
//
// dataset1.cpp
//
namespace set1 {
extern const int tableSize = 10000000;
extern const float table[tableSize] = {
/*... Lots of Numbers ... */
};
}
增量鏈接功能不是100%可靠的。如果你得到這個錯誤,那麼首先要做的就是手動刪除..ilk文件,這樣它就從一個新的文件開始。如果錯誤立即重複,那麼你已經達到了內部限制。最有可能的情況下,我會說,你必須禁用它或考慮開始使用文件。 –
@HansPassant是的,你的第一對夫婦的評論是我在網上閱讀和嘗試。然而,即使做你提到的(和其他事情),可悲的是不允許它與整個數據集進行編譯。通過禁用或考慮使用文件是什麼意思? – spektr
你可以將數據移動到文件而不是硬編碼嗎? –