我创建了非常简单的Windows服务应用程序使用Delphi按时间顺序更新一些数据文件.服务应用程序编译,并且运行良好,但我对最终的exe文件大小不满意.它超过900K.服务本身不使用Forms,Dialogs,但是我看到SvcMgr正在引用Forms和我没有使用的其他大型垃圾.
Name Size Group Package
------------ ------ ----- -------
Controls 80,224 CODE
Forms 61,204 CODE
Classes 46,081 CODE
Graphics 37,054 CODE
Run Code Online (Sandbox Code Playgroud)
有没有办法让服务应用更小?或者是否有其他服务模板我可以使用而不使用表格等?
我正在处理一个应用程序,许多UI元素将在TWebBrowser中.所以我想我添加了一个jQuery UI,让我很容易.
由于http://www.jasontpenny.com/blog/2008/11/21/jquery-in-a-twebbrowser-in-a-self-contained-delphi-app/,我能够插入JQuery和UI javascript文件
我被困在样式表中,我做到了
doc2 := Web.Document as IHTMLDocument2;
doc2.createStyleSheet(FileProtocol(AppPath( 'templates\css\' + JQueryUITheme + '\jquery-ui-1.7.1.custom.css')), 0);
// FileProtocol and AppPath are to return a current application path and converted to FileProtocol URL format.
Run Code Online (Sandbox Code Playgroud)
Javascripts跑得很好,但我无法让图像工作.我也试过StringReplace所有图片引用,但没有结果.
stylesheet.cssText := StringReplace(stylesheet.cssText,
'url(images/','url(' + FileProtocol(AppPath('templates/css/' +
JQueryUITheme + '/images/')), [rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
有人试过类似的东西?
我正在制作UDP C/S. 我遇到服务器每秒可以接收的数据数量问题.
我已经测试过向服务器发送10,100,1000批数据消息,10,100没有问题.发送1000时,只收到300~400.所有测试都在本地进行.
我尝试使用ICS的twsocket和Synapse的tudpblocksocket来实现服务器.两者都出现了同样的问题.
可以向我解释为什么会发生这种情况,以及如何改善服务器性能.
使用TUDPBlockSocket的代码
...
while not Terminated do
begin
try
sz := FUDPServer.WaitingData;
if sz > 0 then
begin
FUDPServer.RecvBuffer(mem.Memory, sz);
mem.Seek(0, 0);
AMessage := fFormats.ReadFromStream(mem);
DoMessageReceived(FUDPServer.RemoteSin.sin_addr, AMessage);
end;
finally
end;
end;
Run Code Online (Sandbox Code Playgroud)
...
使用ICS的代码
...
procedure TShapeServer.WSocketDataAvailable(Sender: TObject; ErrCode: Word);
...
begin
SrcLen := SizeOf(Src);
stream := TMemoryStream.Create;
stream.SetSize(INT_BUFFER_SIZE);
Inc(fMessageReceived);
try
Len := FUDPServer.ReceiveFrom(stream.Memory, stream.size, Src, SrcLen);
if (FSenderAddr.S_addr = INADDR_ANY) or
(FSenderAddr.S_addr = Src.Sin_addr.S_addr) then
begin
while stream.Position < Len do
begin
try
AMessage := …Run Code Online (Sandbox Code Playgroud) 我有一个主应用程序和一个类型库包含2个COM对象,一个是IFile,一个是IFiles.IFiles创建IFile,并将它们存储在TLIST中,并具有标准方法,如Add,Remove等.IFile和IFiles都是TAutoObject.
IFiles中的"添加"方法工作正常,它只是创建IFile对象[代码1],并将其添加到TList.问题是IFile对象实例以一种非常奇怪的方式丢失.见[代码2]
[代码1]
function IFiles.Add(AFilename: String): IFile;
begin
Result := CoIFile.Create;
Result.Filename := AFilename;
// ShowMessage(IntToStr(Result._AddRef));
fFiles.Add(@Result);
end;
Run Code Online (Sandbox Code Playgroud)
在主应用程序中,我有这样的测试代码.[代码2]
var
i: Integer;
f: IFile;
Files: IFiles;
begin
Files := CoTIFile.Create;
for i:= 1 to 4 do
begin
// Create a dummy file object
f := Files.Add('Filename ' + IntToStr(i));
f._AddRef; // Not sure if AddRef works like this
// Prints out the last file
Memo1.Lines.Add(Files.Files[i-1].Filename);
end;
for i:= 0 to Files.Count-1 do
begin
f := Files.Files[i];
// F is nil …Run Code Online (Sandbox Code Playgroud)