簡體   English   中英

在 c# 中使用 System.Buffers (ArrayPool) 創建矩陣

[英]Creating a matrix with System.Buffers (ArrayPool) in c#

我想在 C# 中使用 System.Buffers 或 ArrayPool 創建一個矩陣,這可能嗎?

所有示例似乎都是單維 arrays,或者是固定大小的鋸齒狀數組。

我不想創建多維數組(鋸齒狀數組)我想創建一個矩陣,因為它將用於通過互操作傳遞一些數據。

例如:

var matrix = new object[9000,9000];

簡短的回答是“不,你需要線性化”; ArrayPool<T>僅處理向量,即單維 arrays,基偏移為零; 這部分是因為它們是最常見的情況,部分是因為緩存命中 - 即,如果您只需要擔心單個尺寸維度,則很容易將 arrays 合並在一起,並且很有可能會被重用,但如果您需要擔心兩個(或更多)維度,重用的語義變得更加復雜,並且“命中”(即重用緩沖區)的數量顯着下降(在一般情況下)。

但是,從根本上說,數組的實際有效載荷空間在所有情況下都是相同的——它只是 memory 的一塊,大小是所有維度的倍數——所以T[n,m]T[n*m]有效載荷大小相同T[n*m] 在談論互操作時,您最終只是傳遞了memory的根地址,而消費者將需要去線性化,因此:也許首先使用向量,然后使用任何維度順序使自己去線性化互操作層需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM