我需要在WPF中绘制大量的2D元素,例如线条和多边形.他们的立场也需要不断更新.
我在这里看了很多答案,主要建议使用DrawingVisual或覆盖OnRender函数.为了测试这些方法,我实现了一个渲染10000个椭圆的简单粒子系统,我发现使用这两种方法绘制性能仍然非常糟糕.在我的电脑上,我每秒钟不能超过5-10帧.当你考虑我使用其他技术可以轻松地平滑地抽取50万个粒子时,这是完全不可接受的.
所以我的问题是,我是否违反了WPF的技术限制,或者我错过了什么?还有其他我可以使用的东西吗?欢迎任何建议.
这里是我试过的代码
MainWindow.xaml的内容:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="500" Width="500" Loaded="Window_Loaded">
<Grid Name="xamlGrid">
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs的内容:
using System.Windows.Threading;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
EllipseBounce[] _particles;
DispatcherTimer _timer = new DispatcherTimer();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//particles with Ellipse Geometry
_particles = new EllipseBounce[10000];
//define area particles can bounce around in
Rect stage = new Rect(0, 0, 500, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用GitHub Desktop(即GUI应用程序 - NOT命令行)返回到先前的提交(在同一分支上).我想到的东西是核心功能,因为它是首先使用源代码控制的主要原因.
我可以看到可以恢复提交,但这并不是我想要的,因为它创建了一个新的提交.我只想回过头再次选择,就像我可以跳到另一个分支一样.
这是可能的还是github桌面的限制,我需要使用cmd线?
我需要找到运行我的软件的手机的IP地址.我本以为这是直截了当的但是在论坛上搜索似乎(令人难以置信的是)在Windows Phone 7中没有这种方法 - 但是,这在Windows Phone 8中有所改变吗?任何帮助,将不胜感激.
我试图在Windows7 64x和C#+ VS 2010 express上使用最新的SDK(2011年6月)从一张blackmagic强度专业卡中捕获720p.
我已经成功编译并运行了一个在YUV捕获帧的程序,但是在56帧之后捕获停止(回调函数停止被调用).我想知道我是否在这里错过了一些简单的东西?特别是考虑到我几乎就在那里 - 我得到的帧数正确,内容正确,但只有很短的时间.
还有一些可能相关的其他信息:
这是代码:
public partial class MainWindow : Window , IDeckLinkInputCallback
{
private IDeckLinkIterator _deckLinkIterator;
private List<IDeckLink> _deckLinkList = new List<IDeckLink>();
private IDeckLink _currentDevice=null;
private IDeckLinkInput _deckLinkInput = null;
private int _width=1280;
private int _height=720;
private WriteableBitmap _writeableBitmap =null;
IntPtr _tempRGBData;
byte[] _tempRGBDataBytes;
DispatcherTimer _timer = new DispatcherTimer();
public MainWindow()
{
InitializeComponent();
}
Random _random = new Random();
void _timer_Tick(object sender, EventArgs e)
{
_random.NextBytes(_tempRGBDataBytes);
_writeableBitmap.WritePixels(new Int32Rect(0, 0, _width, _height),_tempRGBData, …Run Code Online (Sandbox Code Playgroud)