2009-06-17 34 views
3

嗨,這裏的問題,對象在內存中處理大量的.NET

從本質上講,我有一個包含依次比較大詞典

所以基本上是一個非常大名單,我有一個在內存非常大采集。

然後我手動將此集合序列化爲XML,並通過http發送它。不用說,XML太大了,有時候這麼大,我甚至在嘗試發送它之前都會遇到OutOfMemory異常。

在.NET中,我將如何去計算潛在的內存使用情況。例如,在這種情況下,我必須一次只處理少量的Collection來將XML分解爲塊。

如何有效地計算每個「塊」的大小。我不想挑選任意數字,例如「在任何時候處理100個項目」,我想知道,每個組塊的大小應該是多大才是一個個案的基礎。

歡呼聲

UPDATE

雖然@Jacob提供對於該特定問題的最佳解決方案中,應用程序的概念結構本身是有缺陷的。

事實上,解決方案是執行一小部分消息,以便計算在處理集合時消息的可能大小。

然後,您逐個發送每個可接受大小的單元。

但這只是一個破解。真正的解決方案是要麼找到一種不傳遞大量消息的方法,要麼完全使用完全不同的協議。

雖然如果你想使用SOAP,但有一個interesting post on the subject here,但我決定尋找一種方式來發送這麼多的數據。

+0

您是否考慮過比XML更簡潔的發送方式?或者是XML設置 – 2009-06-17 23:40:58

+0

嘿克里斯,是的,我現在有。但是,無論我壓縮多少,我都可能仍然需要以大塊的形式發送它。我更好奇並擔心我會如何解決這個問題。歡呼,儘管 – andy 2009-06-17 23:45:13

回答

2

我想你可能比其他任何概念問題更重要。 「計算潛在的內存使用量」與「有效計算每個塊的大小」不一致。 真正得到您的內存使用的準確程度,你可以預測足夠的塊大小的唯一途徑是實際上進行轉換。

聽起來好像有效率地解決這個問題的最好方法可能是逐步解決它 - 基本上那些建議流式傳輸對象的人在說些什麼。如果你不能利用實際的流媒體,你可能想要構建你的序列化,以便你一次完成一個概念單元(即列表中的一個項目與它的伴隨字典子項)。

6

爲什麼不直接流式傳輸數據,以便即時轉換爲XML,避免在內存中擁有巨大的XML文件?

+0

@albertein。嘿艾伯特,謝謝。我從來沒有流過,你能澄清,並更多地分解?謝謝 – andy 2009-06-17 23:48:36

+0

@andy第一我需要知道如何計劃通過HTTP發送它,告訴我,如果你有一個巨大的內存字符串與XML你會怎麼做? – albertein 2009-06-17 23:59:45

1

你是如何發送它?你應該通過WCF來完成,它可以實現流式傳輸。它也會給你一個選擇,通過配置,是否使用XML或二進制,或其他。

0

如果是發送問題,是不是也收到了問題?你聽起來像是在試圖解決一半的問題。對於大數據來說,XML是一個很大的禁忌。