I ' m работает над приложением, поддерживаемым CouchDB. По сути, я хочу создать базу данных для каждого отдельного пользователя моего приложения. Для этого пользователь-администратор создаст базу данных, но в дальнейшем пользователю потребуется доступ к своей базе данных (с использованием HTTP-аутентификации через SSL). Я чертовски потратил время, чтобы понять это.
Лучший ресурс, который я нашел, находится в вики CouchDB по этой ссылке:
http://wiki.apache.org/couchdb/Security_Features_Overview#Authorization
Он предполагает, что вы можете установить авторизацию для каждой базы данных создав документ под названием «_security», в который вы добавите хэш администраторов и читателей. Когда я пытаюсь создать этот документ, я получаю сообщение «Плохой специальный член документа: _security».
$ curl -X GET http://localhost:5984
{"couchdb":"Welcome","version":"1.0.1"}
Любая помощь будет признательна!
Ура,
Аарон. и, надеюсь, это c).
Я написал тестовый код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Direct2D, D2D1;
type
TForm2 = class(TForm)
private
{ Private declarations }
FD2DCanvas: TDirect2DCanvas;
FData: array[0..50000] of TPoint;
public
procedure CreateWnd; override;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses utils;
{$R *.dfm}
procedure TForm2.CreateWnd;
var
i: Integer;
begin
inherited;
FD2DCanvas := TDirect2DCanvas.Create(Handle);
for i := 0 to High(FData) do begin
FData[i].X := Random(Self.ClientWidth div 2);
FData[i].Y := Random(Self.ClientHeight);
end;
end;
procedure TForm2.WMPaint(var Message: TWMPaint);
var
PaintStruct: TPaintStruct;
begin
BeginPaint(Handle, PaintStruct);
try
FD2DCanvas.BeginDraw;
try
FD2DCanvas.Polyline(FData);
finally
FD2DCanvas.EndDraw;
end;
finally
EndPaint(Handle, PaintStruct);
end;
end;
procedure TForm2.WMSize(var Message: TWMSize);
begin
if Assigned(FD2DCanvas) then begin
ID2D1HwndRenderTarget(FD2DCanvas.RenderTarget).Resize(D2D1SizeU(ClientWidth, ClientHeight));
end;
end;
end.
Кроме того, я действительно хочу рисовать длинные полилинии в реальном коде, так как система, над которой я работаю, должна рисовать много ~ 2500 точек полилинии (не менее 10К из них).
Ранее я узнал, что Direct2D, похоже, не любит полилинии, он рисует быстрее, если вы используете много отдельных линий (2 точки полилинии.)
Благодаря Крису Бенсену я выяснил, что медленность была с большими полилиниями при использовании сглаживания . Поэтому я отключил сглаживание, как предложил Крис, и производительность увеличилась с ~ 6000 мс до ~ 3500 мс для рисования 50 тыс. Линий.
Все еще можно улучшить, потому что Direct2D просто не обрабатывает полилинии при использовании сглаживания ]. С отключенным сглаживанием это ' s как раз наоборот.
Теперь время рисования с помощью Direct2D 50k линий, если я рисую большую ломаную линию без сглаживания, составляет ~ 50 мс. Отлично, а!
Дело в том, что GDI по-прежнему быстрее, чем Direct2D , если я рисую в растровое изображение, а после этого я возвращаю результат обратно в форму, он рисует со скоростью ~ 35 мс. и с таким же качеством графики. И Direct2D, похоже, уже использует обратный буфер (он просто рисует, когда вызывается EndDraw ()
).
Итак, можно ли это как-то улучшить, чтобы использование Direct2D было выгодным с точки зрения скорости?
Вот обновленный код:
type
TArray = array[0..1] of TPoint;
PArray = ^TArray;
procedure TForm2.WMPaint(var Message: TWMPaint);
var
PaintStruct: TPaintStruct;
begin
FD2DCanvas.RenderTarget.SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
BeginPaint(Handle, PaintStruct);
try
FD2DCanvas.BeginDraw;
try
FD2DCanvas.Pen.Color := clRed;
FD2DCanvas.Polyline(FData);
finally
FD2DCanvas.EndDraw;
end;
finally
EndPaint(Handle, PaintStruct);
end;
end;
Кстати, даже если я использую предложение Криса о создании геометрии заранее, скорость примерно такая же, как у GDI, но все же не выше.
Мой компьютер обычно запускает приложения Direct3D и OpenGL, и вот результат dxDiag: http://mydxdiag.pastebin.com/mfagLWnZ
Я буду рад, если кто-нибудь сможет объяснить мне, почему такая медлительность. Мы очень ценим пример кода.