2016-12-18 54 views
1

我的應用程序允許用戶一次查看一個圖像。 有2個按鈕(「前一個」&「下一個」),因此用戶可以循環瀏覽圖像。圖像路徑以XML格式存儲。C#顯示圖像(在運行時與加載時)

當應用程序加載我可以創建一個可變var myImage = Image.FromFile(path)對於每個圖像,並且每個圖像添加到圖像的列表,並且當用戶按下一個或下一個從目錄中檢索與myImageBox.Image = List_Images[x];

..或者..只是將路徑存儲到字符串列表中的圖像中,並從列表中檢索路徑,並從列表中檢索路徑myImageBox.Image = Image.FromFile(List_Strings[x]);

由於用戶可能在圖像中來回循環,所以我想知道可能存在哪些性能問題將所有圖像存儲爲圖像變量,將存儲路徑存儲爲字符串。每次按下按鈕時使用Image.FromFile()會更慢嗎?或者是否存儲300-500張圖像會成爲內存的更大問題?

[圖像是不同的分辨率和300個像素寬,250像素高度]

+0

300-500,我會每次加載文件。在內存中緩存許多內容會導致啓動時間非常緩慢。取決於PC規格。一般來說,導航返回將是前嚮導航的一小部分,所以這是每次加載的主要原因。你可以在Microsoft Picture Viewer上試試這個,我很確定他們每次都從磁盤加載。 –

+0

@Jeremy謝謝。我想只是將圖像變量存儲起來,因爲我認爲它會更快,但是考慮到您的想法,我想我會每次都從File加載。是否有門檻,如果只有50張照片,那麼它會更好?我如何選擇你作爲回答者? (我通過自動修正看到'回答'它不是一個字,但它應該是:) – Budapest

回答

0

如果你的應用程序是一個x86機器上運行,那麼進程地址空間2gig最大。這是你如何制定門檻的基本開始。

圖像/位圖是非託管資源,因此您必須對每個資源使用「使用」或顯式「Dispose」,因爲內存太多不是好事。它們不像存儲在線程堆棧中的值類型或存儲在託管堆中的引用類型。

如果有50個左右的3MB圖片我想我會考慮緩存(特別是如果它們是在向後導航是一個非常常見的操作的視頻中的幀),否則我會從磁盤加載。無論如何,現在大多數電腦都配備SSD,這幾乎就像從RAM加載。

您可以編寫一些基準測試,但最終用戶的milage會有所不同。如果300-500是一個常數,PC規格是一個變量,更好的方法是從磁盤加載。