有沒有對齊的數據存儲上具有一定規模的優勢?例如,如果我可以選擇使用一個字節來存儲信息或4個字節,這是首選(假設存儲大小無關緊要,只有優化)?數據大小和磁盤訪問
我問這個問題主要是因爲我知道,如果你正在考慮內存中的值(因此,爲什麼.NET布爾值是4字節的原因,例如,根據關於此問題的另一個問題現場)。
我不要認爲這很重要,但我使用的是.NET框架(特別是C#)。
有沒有對齊的數據存儲上具有一定規模的優勢?例如,如果我可以選擇使用一個字節來存儲信息或4個字節,這是首選(假設存儲大小無關緊要,只有優化)?數據大小和磁盤訪問
我問這個問題主要是因爲我知道,如果你正在考慮內存中的值(因此,爲什麼.NET布爾值是4字節的原因,例如,根據關於此問題的另一個問題現場)。
我不要認爲這很重要,但我使用的是.NET框架(特別是C#)。
如果您需要能夠去在一個文件中任何特定的記錄,你要麼需要某種指數或固定記錄大小的 - 但是這對整個記錄,而不是記錄的每個部件。我通常不會花費很多時間在存儲器中對齊4或8字節邊界上的數據。當然,如果您一次讀取記錄,在內存中的排列位置,那麼你最終有排列的數據上執行任何轉換...所以它都可以最終被交織在一定程度上 - 但轉化爲很可能是一次性的,而不是經常訪問之後的轉換。
存儲大小事項,當然優化 - 因爲從磁盤讀取數據較少會比讀更高(一般爲...)更便宜。
除非您有像固定記錄大小這樣的具體要求,否則我只會嘗試設計存儲,以便儘可能使用使用。如果您對性能有特別關注的領域,您應該對這些問題進行描述。例如,它可以是更有效地使用UTF-16編碼字符串長度超過UTF-8作爲編碼和解碼要求較少的工作......即使它會需要更多的空間。你應該測試這些,而不是做出任何假設。請注意,如果您要加載存儲格式,將會在網絡上,從機械磁盤,固態驅動器等方面產生重大影響......這些將具有不同的性能特徵,這可能會使設計某些內容變得困難在所有情況下都是最快的。
喬恩,謝謝您的回答 - 我正要在acutal後的存儲介質有點不清楚,但它肯定是一個直接的硬盤。在這種情況下,讀取速度至關重要,記錄大小將保持不變(而且,我將最有可能使用UTF-16)。我或多或少只是想知道如果通過在單個字節值上使用bool(4字節)值來存儲布爾信息,是否可以獲得速度優勢。聽起來最有可能的好處是使用字節(但是,我可以也可能應該測試它)。 – Anthony