我对编程世界相对较新.我有一些性能问题:
控制台应用程序比具有图形用户界面的应用程序运行得更快
像C和Pascal这样的语言比C++和Delphi这样的面向对象语言更快吗?我知道语言速度更多地依赖于编译器而不是语言本身,但是程序语言的编译器是否比OO编译器(包括可以生成C代码的C++编译器)产生更快的代码?
我在Delphi上测试了几个基准测试片段,如下所示:
uses
..., Diagnostics;
procedure TForm2.Button1Click(Sender: TObject);
var
i,elapsed: integer;
stopwatch: TStopwatch;
ff: textfile;
begin
if FileExists('c:\bench.txt') then
DeleteFile('c:\bench.txt');
stopwatch := TStopwatch.create;
stopwatch.Reset;
stopwatch.Start;
AssignFile(ff,'c:\bench.txt');
Rewrite(ff);
for I := 1 to 999000 do
write(ff,'Delphi programmers are ladies men :D');
CloseFile(ff);
stopwatch.Stop;
elapsed := stopwatch.ElapsedMilliseconds;
ShowMessage(inttostr(elapsed));
end;
Run Code Online (Sandbox Code Playgroud)
如果我运行/编译debug或release配置结果是900左右并不重要.当我从Visual Studio 切换debug到release(对于c ++和c#)时,我的程序变得非常快.我正在使用Delphi 2010,我从项目管理器以及项目 - >配置管理器甚至项目 - >选项 - > Delphi编译器激活发布配置但是没有效果为什么?
如果重要:我使用的是Windows XP,我有1GB RAM和Intel Core2 CPU.
如果您在D2010中编译程序,则会自动生成清单.res文件.它默认包含在你的程序中吗?或者你必须自己包括它?如果是,给你什么级别的特权?我的程序修改了一个注册密钥,它能够在没有对.res文件进行任何修改的情况下这样做吗?如果没有我需要做什么修改?
一个附带问题:是否有一个组件/专家(可以免费)可以像delphi 2010一样自动生成/包含.res文件在我的delphi 7和delphi 2007项目中?
编辑:忘了提到我没有win7或vista也没有使用过它们
edit2:我已经包含了一个清单文件以防万一本教程但教程只有关Windows Vista的谈判,而不是7将在本教程中的.XML(清单)文件,使能够与win7的UAC处理过的我的应用程序
EDIT3,如果我有我自己的清单文件和Delphi默认情况下,包括它清楚,将制作2个清单文件(1个具有管理员优先权,2个没有)这将导致任何问题/不可预测的行为
在"德尔福棱镜","德尔福棱镜资源"或"德尔福棱镜的代码片断"兜底几乎没有什么好的网站在所有有没有什么好的编程网站()有一些不错的量的代码段和教程德尔福棱镜谷歌搜索?
提前致谢!
下面的代码没有关闭Internet Explorer 8中的选项卡.如果我将Wm_close命令发布到Wnd,它会关闭Internet Explorer,但我想关闭当前选项卡而不是整个'ieframe'.FindWindowEX(Wnd,0,'Frame Tab',nil)是否应该重新设置一个句柄即框架?如果是,为什么不关闭Internet Explorer中的当前选项卡?
var
Wnd, WndChild : hwnd;
begin
Wnd := FindWindow('IEFrame', nil);
WndChild := FindWindowEX(Wnd, 0, 'Frame Tab', nil);
postmessage(WndChild, wm_close, 0, 0);
end;
Run Code Online (Sandbox Code Playgroud) 这是从https://forums.embarcadero.com/message.jspa?messageID=219481获取的代码段
if FileExists(dstFile) then
begin
Fs := TFileStream.Create(dstFile, fmOpenReadWrite);
try
Fs.Seek(Max(0, Fs.Size-1024), soFromBeginning);
// alternatively:
// Fs.Seek(-1024, soFromEnd);
Http.Request.Range := IntToStr(Fs.Position) + '-';
Http.Get(Url, Fs);
finally
Fs.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我不明白究竟什么是抵消,为什么Max(0,Fs.Size-1024)在它的占位符中,如果你去下面(在代码中)
// alternatively:
// Fs.Seek(-1024, soFromEnd);
Run Code Online (Sandbox Code Playgroud)
到底是什么'-1024'...为什么总是使用1024/-1024?并且会在偏移的起搏器工作中单独使用fs.size(我正在尝试使用暂停恢复支持进行下载管理)并且在上面的代码中用tmemmorystream替换tfilestream会对程序产生任何影响吗?
如果重要:我使用d2007和d2010
当我运行我的程序(在调试器/IDE之外)时,我收到错误异步套接字错误10049,我不应该收到消息对话框:“错误”吗?请参阅下面的我的代码
begin
try
ClientSocket1.open;
except
showmessage('error');
end;
end;
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
该代码可以正常工作:
procedure TForm2.Timer1Timer(Sender: TObject);
var
Text: string;
begin SetLength (Text,555);
GetWindowText (getforegroundwindow, PChar (Text),555);
Form2.gtListBox1.Items.Add (
IntToStr (getforegroundwindow) + ': ' + Text);
end;
Run Code Online (Sandbox Code Playgroud)
但是当我放
var
Text: string;
Run Code Online (Sandbox Code Playgroud)
从Timer1Timer事件处理程序到单元实现部分或单元var部分中的“文本:字符串”,我得到错误:E2197
根据文档,不能将常量对象作为var参数传递:
当您尝试将常量作为函数或过程的var或out参数发送时,会出现此错误消息。
但是我没有将文本声明为常量,那么为什么会出现此错误?
编辑: @梅森·惠勒:我不明白,为什么这工作:
implementation
{$R *.dfm}
var
char :integer;//first of all why does delphi let me declare variable that is also a type name
procedure TForm2.Button1Click(Sender: TObject);
begin
char:=11;
showmessage(IntToStr(char));
end;
Run Code Online (Sandbox Code Playgroud)
我的第一个代码无法正常工作,因为我将文本声明为字符串,您会说:“编译器可能认为它是对类型的引用,而不是对变量的引用”,为什么编译器不认为它是对类型的引用而不是对变量的引用在这种情况下的变量?我很困惑
Edit2:我现在明白了什么地方出了问题,但仍然有1个困惑,我没有使用with语句,然后为什么delphi会像对待我一样使用:
with
form1 do
text := 'blahblahblah';
Run Code Online (Sandbox Code Playgroud)
这在delphi部分上是错误的,我的意思是delphi不应该让我们这样做text := 'blah',form1.text := …
我正在使用示例中的代码"我怎样才能将用户从多个国家/地区重定向到多个页面?",来自Geobytes的免费JavaScript .
如果来自英国或挪威的访问者正在查看我的网站,则会将其重定向到专门为这些国家/地区制作的网页,但如果访问者来自任何其他国家/地区(澳大利亚,美国),则不会将其重定向到这些国家/地区的网页; 我的网站(正在建设中)仍为空白.
我希望能够将这些非英国非挪威用户发送到正确的网站.
我的示例代码:
<head>
<script language="Javascript" src="http://gd.geobytes.com/Gd?after=-1"></script>
<script language="javascript">
var UK="UK";
var Norway="NO";
if(typeof(sGeobytesLocationCode)!="undefined")
{
var sCountryCode=sGeobytesLocationCode.substring(0,2);
if(UK.indexOf(sCountryCode)>=0)
{
// UK Visitors would go here
document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.google.co.uk'>");
}
else if(Norway.indexOf(sCountryCode)>=0)
{
// Norway Visitors would go here
document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.google.no'>");
}
else
{
// World Visitors would go here
document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://www.google.com/ncr'>");
}
}
// }
</script>
</head>
Run Code Online (Sandbox Code Playgroud) 什么时候我编写以下代码行在任何app我使用delphi程序的任何地方
ShellExecute(self.WindowHandle,'open','www.yahoo.com',nil,nil, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
kaspersky 2010发出此消息的''行为类似于pdm.hidden数据发送.检测'
为什么这样,我怎么摆脱这个
注意:我正在使用delphi 2007
更新:抱歉没有清除,当我运行我的程序av给我这个错误
delphi ×9
performance ×2
winapi ×2
c ×1
c++ ×1
delphi-2010 ×1
delphi-prism ×1
exception ×1
html ×1
indy ×1
javascript ×1
manifest ×1
oxygene ×1
pascal ×1
shellexecute ×1
sockets ×1
tclientsock ×1
tfilestream ×1
try-finally ×1