Нужно получить Memory<byte>
из string
без создания промежуточных массивов.
Для Span все просто
var text = "Hello";
var charSpan = text.AsSpan();
var bytesSpan = MemoryMarshal.AsBytes(charSpan);
Но для Memory только часть пути
var text = "Hello";
var charMemory = text.AsMemory();
а дальше????
Например так (требует разрешения unsafe-кода):
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Buffers;
namespace CilBytecodeParserTest
{
class Program
{
unsafe class StringMemoryManager<T> : MemoryManager<T>
{
MemoryHandle h;
int len;
public StringMemoryManager(string s)
{
h = s.AsMemory().Pin();
len = s.Length * 2;
}
public override Span<T> GetSpan()
{
return new Span<T>(h.Pointer, len/Marshal.SizeOf(typeof(T)));
}
public override MemoryHandle Pin(int elementIndex = 0)
{
return h; //useless
}
public override void Unpin()
{
//useless
}
protected override void Dispose(bool disposing)
{
if(disposing) h.Dispose();
}
}
static void Main(string[] args)
{
string text = "Hello";
var mngr = new StringMemoryManager<byte>(text);
Memory<byte> mem = mngr.Memory;
}
}
}
MemoryHandle позволяет получить указатель для любого Memory. MemoryManager создает Memory на основе любого Span, а Span можно создать из указателя. Получается универсальный конвертор всего во все. Недостаток в том, что строка будет закреплена в памяти на все время работы с нею. Если же вы спрашиваете, как сделать это нормально (без низкоуровневых хаков), то, видимо, никак. Не нашел такого API.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В С# + MS SQL через ADONET есть так скажем 2 таблицы:
Делаю игру типа понга, шарик отталкивается от коллайдера за счёт "Bounciness = 1" динамический RigidbodyВозникла проблема, что в зависимости от угла...
Создал по шаблонам простое RestApi приложение,у меня есть классы User и Award и их контексты соответственно, объекты класса User я легко вывожу на хост,...
Делаю выгрузку из datagridview