在我的串行器/解串器,我有下面的代碼片段:最快的方法來檢查類型是blittable?
if (element_type.IsValueType && collection_type.IsArray)
{
try
{
GCHandle h = GCHandle.Alloc(array_object, GCHandleType.Pinned);
int arrayDataSize = Marshal.SizeOf(element_type) * c.Count;
var array_data = new byte[arrayDataSize];
Marshal.Copy(h.AddrOfPinnedObject(), array_data, 0, arrayDataSize);
h.Free();
WriteByteArray(array_data);
return;
}
catch (ArgumentException)
{
//if the value type is not blittable, then we need to serialise each array item one at a time
}
}
,其目的是試圖寫值類型的流的陣列,以最有效的方式(即,只內容爲一串字節)。
問題出現在類型爲值類型但不是blittable且Alloc()失敗時。此時異常被捕獲並且控制傳遞給處理數組的代碼,就像它由引用類型組成一樣。
然而,由於在我的應用程序中遇到的值類型的數量,此檢查(由於拋出和捕獲我瞭解的異常非常緩慢)證明是嚴重的瓶頸。所以我想知道,什麼是檢查類型是blittable的最快方法?
我有同樣的問題,我已經結束了每種類型的緩存結果(例如在靜態字典中)。檢查和這裏一樣,try/catch。 –