我正在玩FireMonkey,看看图形绘画是否比GDI或Graphics32(我目前选择的库)更快.
为了看它有多快,我已经进行了一些测试,但我遇到了一些奇怪的行为:
与较粗的线条相比,绘制细线(<1.5像素宽)似乎非常慢:

结果非常稳定; 一旦线宽超过1个像素宽,绘图总是变得更快.
在其他库中,似乎有单行快速算法,粗线较慢,因为首先创建了多边形,所以为什么FireMonkey反过来呢?
我主要需要单像素线,所以我应该以不同的方式画线?
测试使用以下代码运行:
// draw random lines, and copy result to clipboard, to paste in excel
procedure TForm5.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
i,iWidth:Integer;
p1,p2: TPointF;
sw:TStopWatch;
const
cLineCount=1000;
begin
Memo1.Lines.Clear;
// draw 1000 different widths, from tickness 0.01 to 10
for iWidth := 1 to 1000 do
begin
Caption := IntToStr(iWidth);
Canvas.BeginScene;
Canvas.Clear(claLightgray);
Canvas.Stroke.Kind := TBrushKind.bkSolid;
Canvas.Stroke.Color := $55000000;
Canvas.StrokeThickness :=iWidth/100;
sw := sw.StartNew;
// draw 1000 random lines
for I := …Run Code Online (Sandbox Code Playgroud) 我有两个Delphi7程序:一个COM自动化服务器(EXE)和另一个使用自动化服务器的程序.
我需要从一个程序传递一个字节数组到另一个程序.
经过一番搜索,我发现使用变体数组是可行的方法(如果你知道更好的方法,请纠正我).
我的问题是:如何在一个程序中创建变量数组,然后如何在另一个程序中读取它的值?
我知道VarArrayCreate和VarArrayLowBound/VarArrayHighBound,但我不确定如何正确地做到这一点.
谢谢!
我正在将Windows窗体应用程序转换为WPF应用程序.有没有办法获取诸如启动路径,用户应用程序数据路径,通用应用程序数据路径等,而无需引用System.Windows.Forms?
以前,我用过System.Windows.Forms.Application.StartupPath,但System.Windows.Application.Current对象不包含相同的信息.
我正在使用Model-First模式中的Entity Frameworks 4.0(CTP5)构建ORM.我的一些实体具有复杂(对象树)属性,不需要是ORM实体 - 它们只对使用此数据库的后端服务器系统感兴趣,而不是对使用此数据库的客户端感兴趣.
我可以将属性的对象树序列化为字符串并将其作为字符串存储在DB中,但SQL Server XML数据类型确实很吸引人.能够以智能方式查询XML数据内容将是非常好的.
但是,我没有看到任何方法在Visual Studio实体建模器中指定我想要XML数据类型.
是完成此操作以在模型中指定字符串字段,发出DDL,然后修改DDL以将字符串字段更改为XML字段的唯一方法吗?这似乎非常脆弱,只写一次,永远不会改变.有没有更好的办法?
我正在考虑将我的客户端应用程序从使用XACML 2.0授权服务迁移到使用更新的XACML 3.0服务.
在将客户端应用程序从生成XACML 2.0请求迁移到发出XACML 3.0请求时,我会遇到哪些更改或问题?
我正在从VS 2010在线模板中的WCF REST服务模板40(CS)创建一个站点.它工作得很好,但我需要保护它.
我需要支持Windows,Linux和iPhone应用程序,所以REST + oAuth似乎是一个很好的解决方案,但我不知道从哪里开始.
基本上我需要像传统的表单auth一样将用户名/密码(当然是哈希)解析到我的数据库.
我正在创建一个桌面应用程序,它具有可能运行几秒钟的计算量大的操作.显然,需要最小化该操作的时间.该操作相当容易并行(单个子任务),每个子任务在单个线程上大约需要50ms.在多个线程上,每个子任务需要4-5倍的时间,因为在GC中花费了40-50%的时间,从而有效地完全取消了加速.
所以我需要减少GC的工作量.我的第一个想法是试图找到哪种类型的对象被垃圾收集最多,但我意识到虽然我经常进行内存分析,但我从未搜索过这样的模式.通常查看堆快照或堆快照之间的差异,但这些显示活动的对象,而不是在这些快照之间创建和处置的对象.所以这是我的第一个问题:什么是最简单的方法来查找创建哪些类型和垃圾收集最多?我试图寻找方法调用计数来查看是否经常怀疑某些构造函数,但是以百万计数创建的所有对象都只是小结构类型.如果我理解正确的话,这些应该对GC没有影响,即使是盒装?
该算法创建了数十万个单独的结果点对象.这些当然不应该是gc'd,因为它们代表了操作的输出.但它引出了我的第二个问题:在GC中花费的时间主要取决于对象的总数,还是主要取决于实际收集的对象数量?我应该尝试限制结果对象的数量,而是使用更少但更大的结果对象吗?
编辑:我通过使用VS 2010并发可视化工具找到了在GC中花费的时间.此外,在并行代码段中,阻塞线程的大多数部分都在等待gc
编辑:我应该澄清性能问题是因为执行在工作站GC上有效序列化.例如,请参阅本文中描述的性能问题.
我无法阻止垃圾收集器阻塞我的线程(我不认为我想要桌面应用程序的服务器GC,对吗?).因此,为了获得此操作的线性加速,我需要减少调用GC的次数.浪费的大部分时间实际上被其他线程阻塞,等待一个线程执行GC.
是否有一个包允许我为同一个缓冲区提供多个Occur结果缓冲区(如grep-a-lot:http://www.emacswiki.org/emacs/grep-a-lot.el).
在分析多个关键字的日志文件时,我遇到了这个问题(比如查看不同但相关的线程在做什么).
我有两个组件A和B. A是强名称而B不是.
根据MSDN,我不能从A引用B,因为强名称程序集只能引用另一个强名称程序集.
但是为什么可以加载程序集B,实例化它的类并使用反射从程序集A调用它们的方法?
// Inside assembly A
Assembly b = Assembly.LoadFrom("B");
obj myObj = b.CreateInstance("MyClass");
Run Code Online (Sandbox Code Playgroud)
这是否会破坏不允许在签名组中引用未签名组件的目的?
.net ×4
c# ×2
delphi ×2
performance ×2
arrays ×1
assemblies ×1
automation ×1
delphi-7 ×1
emacs ×1
firemonkey ×1
graphics ×1
line ×1
oauth ×1
reflection ×1
rest ×1
strongname ×1
variant ×1
vb.net ×1
wcf ×1
wpf ×1
xacml ×1
xacml2 ×1
xacml3 ×1
xml ×1