You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET browser-wasm运行时中的MemoryView是什么?

.NET 7 Browser-Wasm 中 MemoryView 的 JS 端实际形态

在.NET 7的非Blazor browser-wasm运行时使用JSImport进行互操作时,Span<>或ArraySegment<>会被封送为MemoryView对象,它在JavaScript端的具体形态如下:

  • 核心是类型化数组的轻量包装:MemoryView内部持有与.NET元素类型匹配的JavaScript类型化数组(比如Uint8Array对应.NET的byte类型、Int32Array对应int类型),这个数组指向的是与.NET内存共享的底层缓冲区。
  • 包含范围标识属性:除了底层数组,MemoryView还提供byteOffset(该片段在原缓冲区的字节偏移量)和length(片段包含的元素数量)两个属性,用于明确当前视图覆盖的内存范围。
  • 可直接操作底层数组:你可以通过MemoryView的buffer属性获取到对应的类型化数组,对这个数组的读写操作会直接同步到.NET侧的内存中。

举个JavaScript侧的处理示例:

function handleMemoryView(memoryView) {
    // 获取底层类型化数组
    const typedArray = memoryView.buffer;
    // 计算元素起始索引
    const startIndex = memoryView.byteOffset / typedArray.BYTES_PER_ELEMENT;
    
    // 遍历处理片段内的元素
    for (let i = 0; i < memoryView.length; i++) {
        console.log(typedArray[startIndex + i]);
    }
}

需要注意:MemoryView的生命周期与.NET侧的Span<>/ArraySegment<>绑定,当.NET侧的内存被回收后,JS侧对应的MemoryView缓冲区会失效,避免在JS中长时间持有该对象。

内容的提问来源于stack exchange,提问作者curiousdannii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:12:39