Это может добавлять немного производительности, но максимальная длина строки будет ограничена размером буфера (в данном случае 4 Кб).
Для выбора - моя оптимизированная версия изначального варианта с предварительным определением длины:
function THIRichEdit._Get(var Item: TData; var Val: TData): Boolean;
var
Ind, L: Integer;
Text: string;
begin
Ind := ToIntIndex(Item);
Result := (Ind >= 0) and (Ind < Control.Count);
if Result then
begin
L := Control.Perform(EM_LINELENGTH, Ind, 0); // Посчитать длину строки
if L > 0 then
begin
Inc(L, 2); // Размер буфера с запасом SizeOf(Word) (иначе не работает)
SetLength(Text, L);
PWord(Pointer(Text))^ := L; // В первом Word буфера - размер буфера
L := Control.Perform(EM_GETLINE, Ind, Longint(Pointer(Text)));
if (L <> 0) and (Text[L] = #13) then Dec(L); // Выдаёт также символ #13 в конце
if (L <> Length(Text)) then SetLength(Text, L); // В L - действительная длина строки (обычно меньше выделенного размера)
end
else
Text := '';
dtString(Val, Text);
end;
end;