我有大量的对象都存储了文件名.所有文件名都在给定的基目录中(让我们称之为C:\BaseDir\).我现在正在考虑两种选择:
如果我正确理解Delphi字符串,第二种方法将需要更少的内存,因为基本路径字符串是共享的 - 假设我将相同的字符串字段传递给所有对象,如下所示:
TDataObject.Create (FBasePath, RelFileName);
Run Code Online (Sandbox Code Playgroud)
这个假设是真的吗?内存中只有一个基本路径的字符串实例吗?
如果有人知道处理这种情况的更好方法,也可以随意评论.
谢谢!
我正在将构建服务器(Jenkins)升级到Delphi XE2.编译运行时包时会发生以下错误:
ComponentsR.vrc(61): error RC2135: file not found: ComponentsR_Icon4.ico
Run Code Online (Sandbox Code Playgroud)
此运行时包中没有图标或资源,因此我不知道如何处理此消息.什么是"vrc"文件btw?
谢谢你的帮助.
我想在文本文件中存储小位图,类似于Delphi使用它的dfm文件的方式.
我可以使用RTL或VCL中的函数来执行此操作吗?
使用Delphi/GDI从剪切区域中排除圆角矩形的正确方法是什么?
有ExcludeClipRect排除的矩形区域,并有CreateRoundRectRgn连同SelectClipRgn到剪辑区域设置为圆角矩形.
但是如何从裁剪区域中排除圆形矩形(类似于ExcludeClipRoundRect或ExcludeClipRgn)?我使用CombineRgn进行了实验,但没有让它正常工作.
在 sveltekit 的上下文中,我需要一些帮助来理解 SSR。我注意到该load方法在服务器和客户端上都被调用,我无法解决这个问题。我想它需要初始化客户端组件的状态,但为什么不将 SSR 产生的 props 传递给客户端呢?
如果在 SSR 期间需要做数据库请求怎么办?现在从客户端重复相同的数据库请求?如果这甚至不可能怎么办?我知道我可以使用browserfrom$app/env在服务器和浏览器上运行不同的代码,但我返回什么道具?有没有办法将数据从服务器端调用load传递到客户端调用?
下面的代码抛出一个 EZDecompressionError 和消息“无效的 ZStream 操作”
Reader.Free
Run Code Online (Sandbox Code Playgroud)
被执行。有人能告诉我这段代码有什么问题吗?
Reader := nil;
Decompressor := nil;
InputFile := TFileStream (FileName, fmOpenRead);
try
Decompressor := TDecompressionStream.Create (InputFile);
Reader := TReader.Create (Decompressor, 1024);
SomeString := Reader.ReadString;
finally
Reader.Free
Decompressor.Free;
InputFile.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我测试了更改内存释放命令的顺序,但这似乎没有帮助。省略 Reader.Free 行当然会导致内存泄漏。
我刚刚编写了自己的日志框架(非常轻量级,不需要大型日志框架).它由一个接口ILogger和许多实现该接口的类组成.我有一个问题是TGUILogger,它将TStrings作为日志记录目标,并将日志记录与主线程同步,以便列表框的Items成员可以用作目标.
type
ILogger = Interface (IInterface)
procedure Log (const LogString : String; LogLevel : TLogLevel);
procedure SetLoggingLevel (LogLevel : TLogLevel);
end;
type
TGUILogger = class (TInterfacedObject, ILogger)
public
constructor Create (Target : TStrings);
procedure Log (const LogString : String; LogLevel : TLogLevel);
procedure SetLoggingLevel (LogLevel : TLogLevel);
private
procedure PerformLogging;
end;
procedure TGUILogger.Log (const LogString : String; LogLevel : TLogLevel);
begin
TMonitor.Enter (Self);
try
FLogString := GetDateTimeString + ' ' + LogString;
TThread.Synchronize (TThread.CurrentThread, PerformLogging);
finally
TMonitor.Exit (Self);
end;
end; …Run Code Online (Sandbox Code Playgroud) 是否可以从专用泛型类型派生类:
TGenericBase <T> = class
// ...
end;
TSpecializedDerived = class (TGenericBase <String>)
// ...
end;
Run Code Online (Sandbox Code Playgroud)
只是想知道这是否可能......
当我把它放在一个新项目中时,编辑代码工作正常.必须是由于其他一些错误; 对于那个很抱歉
有没有办法(只读)访问任意内存位置而不会遇到访问冲突?我认为每个进程都有自己的虚拟地址空间,它可以读取所有可用的内存位置......似乎并非如此,因为如果我执行类似的操作,我的程序会挂起
var
IntPtr : PInteger;
AnInteger : Integer;
...
IntPtr := $100;
AnInteger := IntPtr^;
Run Code Online (Sandbox Code Playgroud)
我仍在尝试编写我的低级递归大小函数,并尝试检测数据成员是否是对象引用.
谢谢!
我有一个后台线程执行I/O操作(使索引保持最新).但除了几个客户端访问服务器的硬盘,我希望尽快访问这些访问.所以我想,如果索引线程仅在I/O负载较低时运行,那就太好了.
有没有办法解决这个问题?
我也愿意接受其他建议.
delphi ×9
delphi-2009 ×3
delphi-xe2 ×2
delphi-xe ×1
file-io ×1
gdi ×1
generics ×1
inheritance ×1
io ×1
memory ×1
performance ×1
pointers ×1
string ×1
svelte ×1
sveltekit ×1
windows ×1