小编Sim*_*mon的帖子

嵌套的命名空间和模糊的符号

我有一个问题,它会侵入嵌套的命名空间和模板化的类.我还能够创建测试用例,它产生与实际代码相同的错误,但更具可读性.

使用VS2012和2010平台工具集编译以下代码会导致错误:

namespace A
{
   namespace B
   {
      namespace C1
      {
         struct SMeasResult{};
      }
      namespace C2
      {
         struct SMeasResult{};
      }
   }
}

namespace C1Test
{
   using namespace A::B::C1;

   template<typename T>
   class Fook
   {
   public:

      void Yu()
      {
         SMeasResult Field;
      }
   };
}

namespace C2Test
{
   using namespace A::B::C2;

   template<typename T>
   class Fook
   {
   public:

      void Yu()
      {
         SMeasResult Field;
      }
   };
}

void m(){
   C1Test::Fook<int> yu;
   C2Test::Fook<int> me;

   yu.Yu();
   me.Yu();
}
Run Code Online (Sandbox Code Playgroud)

具体错误如下:

1>------ Build started: Project: MultiVicomTest (Visual Studio 2010), …
Run Code Online (Sandbox Code Playgroud)

c++ templates namespaces using visual-studio-2010

7
推荐指数
1
解决办法
1349
查看次数

改进DrawingContext性能渲染几何(多边形和折线)

这是我的第一个问题,但是我是一个很长时间的潜伏者.我将其分为两部分,一部分解释我正在做什么以及为什么我认为这是要走的路,第二部分是我无法为自己解决的实际问题.

我在做什么? 我目前正在开发一个用于渲染二维特征的框架,以便实时显示.您可以在浏览器中考虑Google地图等应用程序,但该框架旨在呈现各种地理数据(而不仅仅是轴对齐的栅格数据,如Google Tiles).

该框架将集成到我们(公司)的最新产品中,该产品是用于台式机和笔记本电脑的WPF应用程序.

因此,我选择了WPF的实际渲染几何 ; 可见性和遮挡剔除由我自己完成,输入处理(鼠标拾取),移动相机等.

作为实时应用程序,它需要至少达到30 FPS.渲染图像时框架表现得足够:我可以每帧绘制几千个位图而不会出现问题,但多边形数据却成为一个主要问题.

我正在使用WPF渲染相当数量的折线和多边形数据的实际问题,特别是使用DrawingContext和StreamGeometry.到目前为止,我的理解是,如果我需要表现,这就是我要采取的方法.但是,我无法达到我期望的结果.

这就是我用实际数据填充StreamGeometry的方法:

using (StreamGeometryContext ctx = Geometry.Open())
{
        foreach (var segment in segments)
    {
        var first = ToWpf(segment[0]);
        ctx.BeginFigure(first, false, false);

        // Skip the first point, obviously
        List<Point> points = segment.Skip(1).Select(ToWpf).ToList();
        ctx.PolyLineTo(points, true, false);
    }
}
    Geometry.Freeze();
Run Code Online (Sandbox Code Playgroud)

这就是我绘制几何体的方式:

_dc.PushTransform(_mercatorToView);
_dc.DrawGeometry(null, _pen, polyline);
_dc.Pop();
Run Code Online (Sandbox Code Playgroud)

作为测试,我将OpenStreetMap中的ESRI形状加载到我的应用程序中以测试其性能,但我完全不满意:我的测试数据包含~3500个线段,总共约20k行.

将每个段映射到它自己的StreamGeometry表现得非常糟糕,但我已经预料到了:渲染大约需要14秒.

然后我尝试使用多个数字将更多段包装到相同的StreamGeometry中:80 StreamGeometry,渲染大约需要50ms.

但是我得不到比这更好的结果.将行数增加到大约100k使我的应用程序几乎无法使用:渲染需要超过100毫秒. 除了在渲染矢量数据时同时冻结几何体和笔,我还能做些什么呢?

我现在更喜欢使用DirectX而不是依赖WPF来做它,因为某些东西似乎非常错误.

编辑

为了进一步阐明我在做什么:该应用程序实时显示地理数据,非常像浏览器中的谷歌地图等应用程序:但它应该可视化更多,更多的数据.您可能知道,谷歌地图允许缩放和平移,它需要> 25 FPS才能显示为流畅的动画; 任何不足都不会流利.

*对不起,我不应该在实际产品发布之前上传这个视频.然而,您可以设想像谷歌地图这样的东西,但是有大量的矢量数据(多边形和折线).*

有两种解决方案,其中一种经常被陈述:

在位图中缓存重图

实现看起来有点简单,但我发现这种方法存在一些问题:为了正确实现平移,我需要避免 …

c# wpf performance drawingcontext

5
推荐指数
1
解决办法
3692
查看次数

在 SQLite 中存储图表 - 关系型还是平面型?

问题

我需要在 sqlite 数据库中存储有向图,我想知道如何解决这个问题。

我的第一个解决方案是创建两个表,一个用于节点,一个用于边缘,但是与问题的非关系模型相比,我对插入性能不满意。

给定一个包含 10 万个节点的典型图,每个节点都有 50 个传出边,插入到关系模型中大约需要 20 秒,而使用扁平方法则需要 7 秒。

实际问题

  • 我可以做些什么来加快使用关系模型将图形插入数据库的过程吗?
  • 我是否以次优的方式使用 SQLite API?
  • 我是否应该考虑使用关系方法,因为它不是必需的,只是“很好”?

附加信息

我写了两个示例来演示我的问题:

关系法

    public sealed class RelationalGraphDatabase
        : IDatabase
    {
        private readonly SQLiteConnection _connection;

        public RelationalGraphDatabase()
        {
            const string fname = @"E:\relational_graph.db";
            if (File.Exists(fname))
                File.Delete(fname);

            var conn = new SQLiteConnectionStringBuilder
                {
                    DataSource = fname
                };
            _connection = new SQLiteConnection(conn.ToString());
            _connection.Open();
            using (
                var command = new SQLiteCommand("CREATE TABLE Node (Id INTEGER PRIMARY KEY, Name TEXT)", _connection))
            {
                command.ExecuteNonQuery(); …
Run Code Online (Sandbox Code Playgroud)

c# sqlite graph directed-graph

5
推荐指数
0
解决办法
1513
查看次数