初始测试表明 GDI+(用 VB.NET 编写)对于我的目的来说不够快。我的应用程序需要能够以每秒 20 多帧的全屏分辨率绘制数万个粒子(彩色圆圈,最好是抗锯齿的)。
我很犹豫要不要离开 GDI+,因为我还需要 GDI+ 的许多其他高级绘图功能(虚线图案、图像、文本、路径、填充)。
寻找关于使用 OpenGL、DirectX 或其他平台来加速 VB.NET 中的粒子渲染的好建议。我的应用程序是严格的 2D。
善意,大卫
我使用Drawing.Graphics对象和DrawImage()函数在Control上绘制了大量图像(所有尺寸= 24x24 pixelformat = 32BppPArgb).可以缩小我的应用程序,这意味着Graphics对象附加了一个Transform Matrix,它控制缩放和平移.
当缩放率低于50%时,绘制这些图标毫无意义,但我想从绘图图标过渡到不绘制图标更平滑.即,从70%开始,应该使用额外的透明度因子绘制图标,以便它们在50%时变得完全透明.
如何绘制具有额外透明度的位图,而不会花费比DrawImage()更长的时间?
谢谢,大卫
根据我阅读的 Microsoft TPL 文档(链接),调用该Task.Wait()方法将阻塞当前线程,直到该任务完成(或取消或故障)。但它也表示,如果有问题的任务尚未启动,该Wait方法将尝试通过要求调度程序重新分配它在自己的线程上运行它,从而减少由于阻塞而造成的浪费量。
我有一个系统,其中任务(一旦运行)通过启动其他任务并等待它们的结果来收集数据。反过来,这些其他任务首先从其他任务中收集数据,并且非常强大,可能有几百层深。我真的不希望无数的任务阻塞并等待最后的一项任务最终完成。
但是,当我在测试控制台应用程序中尝试此操作时,Task.Wait()似乎根本没有启动任何东西。
构建一系列任务的正确咒语是什么,这些任务必须以最少的周期浪费相互等待?它有点像 ContinueWith,除了从系列中的最后一个任务开始......
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var source = new CancellationTokenSource();
var token = source.Token;
// Create a non-running task.
var task = new Task<string[]>(() => InternalCompute(token), token);
// Isn't this supposed to start the task?
task.Wait(CancellationToken.None);
// I realise this code now won't run until the task finishes, …Run Code Online (Sandbox Code Playgroud) 有没有人知道讨论GDI +性能的任何可靠(并且希望是广泛的)书籍/网站(超出明显的范围)?
例如,我最近遇到了这个优秀的实验.我最近也注意到这种Graphics.FillPath()方式比方式更快Graphics.DrawPath().我很想知道我缺少的其他重要信息.
亲善,大卫
将文件路径(URI)转换为System.Guid的好方法是什么?我想尽量减少碰撞的可能性,但我很满意一个相当独特的哈希(数据库中可能永远不会超过几十/百项)
我正在尝试使用OpenNURBS工具包构建应用程序(请参阅此处),并且我在调试时收到带有以下消息的FileLoadException:
混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时加载.
OpenNURBS工具包是此时项目中唯一的非系统程序集,因此我知道该文件存在问题.这些假设的配置选项在哪里和什么?任何帮助,将不胜感激.
我正在编写一个抽象类(在其构造函数中)收集所有遵循特定签名的静态方法.它收集的方法必须如下:
static ConversionMerit NAME(TYPE1, out TYPE2, out string)
Run Code Online (Sandbox Code Playgroud)
我不关心命名或前两个参数的类型,但第二个和第三个参数必须是'out'参数,第三个参数必须是System.String类型.
我的问题是最后检查字符串:
MethodInfo[] methods = GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
foreach (MethodInfo method in methods)
{
if (method.ReturnType != typeof(ConversionMerit))
continue;
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length != 3)
continue;
if (parameters[0].IsOut) continue;
if (!parameters[1].IsOut) continue;
if (!parameters[2].IsOut) continue;
// Validate the third parameter is of type string.
Type type3 = parameters[2].ParameterType;
if (type3 != typeof(string)) // <-- type3 looks like System.String&
continue;
// This is where I do something irrelevant to …Run Code Online (Sandbox Code Playgroud) 使用标准模板,我设法制作一个自定义荧光笔,将所有出现的字符串"Archive ????? Key"(其中????是变量名中允许的任何字符集合)变为粉红色.然而,我真正想要的是"归档"和"关键"部分变成粉红色和"????" 成为栗色的部分.据我了解VSIX荧光笔(我真的没有)这意味着定义两个ClassificationFormatDefinitions,但每次我尝试我只是打破项目.
我的GetClassificationSpans方法(这是与标准模板的唯一重大偏差)看起来像:
public IList<ClassificationSpan> GetClassificationSpans(SnapshotSpan span)
{
List<ClassificationSpan> spans = new List<ClassificationSpan>();
string text = span.GetText();
int idx0 = 0;
int idx1;
while (true)
{
idx0 = text.IndexOf(keyPrefix, idx0);
if (idx0 < 0)
break;
idx1 = text.IndexOf(keySuffix, idx0 + 6);
if (idx1 < 0)
break;
// TODO: make sure the prefix and suffix are part of the same object identifier.
string name = text.Substring(idx0 + lengthPrefix, idx1 - idx0 - lengthPrefix);
string full …Run Code Online (Sandbox Code Playgroud) 什么是在AvalonEdit控件中只读取某些行的强大方法?允许用户更改C#或VB模板文件中的某些方法体,但不允许其他任何方法体.当用户添加或删除行时,每行的只读状态需要保持不变,即编辑内容下方的只读块需要相应地上下移动.
我在winforms上的WPFHost中使用AvalonEdit.
++应用于C#中的long的应用程序的行为在应用时是否一致long.MaxValue?呼叫不是在一个checked块内进行的.我需要知道,无论在任何情况下,现在还是将来,它都可能抛出OverflowException而不是包装long.MinValue.
c# ×6
.net ×2
gdi+ ×2
performance ×2
avalonedit ×1
c#-4.0 ×1
drawing ×1
gdi ×1
guid ×1
hash ×1
image ×1
increment ×1
opennurbs ×1
readonly ×1
reflection ×1
transparency ×1
uri ×1
vb.net ×1
vsix ×1