2012-08-08 387 views
2

我在C#中有一個程序,在處理它們後將大量圖像保存到磁盤 。由於需要保存很多圖像,這似乎需要相當長的一段時間。在C#中快速保存多張圖片到磁盤

現在,我想知道:有沒有什麼方法可以加快在C#中保存圖像?目前,我正在使用標準bmp.Save(filename)的方法。

如果有幫助,圖像生成過程的一部分涉及使用鎖定位來更快速地訪問和修改像素值,所以也許當我這樣做時,圖像可以同時保存到磁盤?道歉,如果這個想法是愚蠢的,但我仍然有點新C#。

+4

你算出你目前保存的數據速率是什麼?它接近硬盤的平均寫入速度規格嗎?如果是這樣,你可以停止思考這個問題。 – 2012-08-08 23:03:45

+1

Im對Image.Save不太好,如果它的效率和速度不快,但我知道1件事,那就是它取決於你的硬盤速度 – EaterOfCode 2012-08-08 23:06:36

+1

視頻編碼器在以高速率將磁盤保存到磁盤上是相當不錯的。除此之外,沒有明顯的方式可以給你提供建議。 – 2012-08-08 23:16:07

回答

3

您肯定可以爲每個圖像保存啓動一個新線程。這將減少一點時間,磁盤然後將成爲瓶頸。

另一種選擇是將圖像保存到臨時緩衝區列表中,然後將控制權返回給程序。然後有一個線程在後臺將每個磁盤寫入磁盤。當然,這隻會讓這種情況很快出現。它可能可以滿足您的需求。

我相信.NET已經實現了某種異步I/O來爲你做這件事。我知道Windows有它在.NET中的意義。

這可能會有幫助。

http://msdn.microsoft.com/en-us/library/kztecsys(v=vs.71).aspx

+2

如果磁盤由於多個寫入線程而開始頭尋找顛簸,則遊戲結束。 – 2012-08-08 23:08:06

+1

@RobertHarvey誠然,但我不知道另一種選擇。除了......我即將更新一次消化。大多數O.S.會保持寫入同步,但是一旦它們全部在寫入緩存中排隊,它仍然會更快。然後,他們可以像硬盤一樣快地寫入磁盤,但不必擔心程序在每個映像中迭代並同步保存的開銷。 – 2012-08-08 23:09:10

+0

非常好,謝謝你們:我現在就來看看這個。與線程一起工作一直是我對學習感興趣的東西,所以我現在要把它作爲一個機會來實現:)乾杯! – plone 2012-08-08 23:20:07