在c#中OutOfMemoryExcetpion ...我試圖創建一個主要基於BPlus樹的新索引。該指數應該用於海量數據(超過5萬個項目)。爲了使索引更快,我在RAM中保留了內部樹節點(每個節點有大約4KB的信息,256個子節點引用)(它們經常被訪問)。葉子(可變大小)被寫入磁盤,最大200MB的文件。
爲了寫或從文件中讀取數據,我使用了以下內容:在寫入FileStream時在c#中OutOfMemoryException
FileStream _FS = new FileStream(FullPath, FileMode.OpenOrCreate);
...
byte[] Data = new byte[size];
_FS.Read(Data, 0, size);
...
_FS.Write(Data, 0, _BlockSize);
的問題是,在一個較大的數字插入的項目(19 000 000)我得到的OutOfMemoryException異常。我知道樹的內部結構(內部節點)可能會佔用大量內存,但是,我相信這不是內存滿的原因。
在我使用下面的構造:
_FS = new FileStream(FullPath, FileMode.OpenOrCreate, FileAccess.ReadWrite,
FileShare.None, 1024, FileOptions.WriteThrough | Settings.FILE_FLAG_NO_BUFFERING);
的OutOfMemoryException異常不提高(至少不是在20 000 000項),然而,在該項目被插入的速度較小。 我相信,當使用第一個FileStream構造函數時.net使用一些內部緩衝區(在RAM中),這會填充內存並導致引發OutOfMemoryException。
問題是,如何使用FileStream(或其他)爲了能夠高速插入項目(寫入磁盤),並引發OutOfMemoryException?
該異常與流本身無關,您需要顯示代碼的其他部分並解釋如何在內存中存儲/分配樹。 –
這裏'size'的值是什麼? –
也;你提到「項目」 - 它是每個文件的項目?要麼...? (我想看看'Data'分配的頻率) –