17 力为

尚未进行身份认证

暂无相关简介

等级
TA的排名 5k+

vcpkg + CMake

除了Conan外,vcpkg也是不错的C++包管理工具。跟conan相比,vcpkg是源码级的包管理,安装包的时候同时在本地编译。安装vcpkggit clone https://github.com/Microsoft/vcpkg.gitcd vcpkg#编译.\bootstrap-vcpkg.bat#集成vcpkg integrate install安装包...

2019-10-29 10:48:15

Javascript中for-in效率分析和优化

 Javascript程序中,我们经常使用Object来模拟dictionary/map/hashmap的行为,也会使用for-in语法来遍历dictionary的元素。但你是否遇到过由于使用for-in而导致程序产生性能问题呢? 问题Javascript里的数据结构比较简单,除了数组,就是使用对象模拟的字典/Hash表。比如:var dict = { key1: "va...

2018-10-13 13:03:24

Python插件机制实现

插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件。对于Python这样的脚本语言,实现插件机制更简单。机制Python的__import__方法可以动态地加载Python文件,即以某个py脚本的文件名作为__import__的参数,在程序运行的时候加载py脚本程序模块。对应的import关键字则是静态加载依赖的py模块。描述__impor...

2018-09-17 10:48:37

Canvas2D绘制填充面

组成面的loop分为outer loop和inner loop,其中outer loop一般为逆时针,inner loop一般为顺时针。如果inner loop的顺序与outer loop一致,则不内部的loop会失效。<!DOCTYPE html><html><body><canvas id="myCanvas" width="1000" h...

2018-05-23 12:50:19

GDI设置字体旋转的方法

方法1:通过设置WorldTransform进行变换:angle为文字旋转的角度position为文字的位置 XFORM xForm; xForm.eDx = float(position.x); xForm.eDy = float(position.y); xForm.eM11 = float(cos(angle)); xForm.eM12 = float(sin(a...

2018-04-02 13:27:57

Entity Framework 和 Sqlite

记录在使用Entity Framework 和 Sqlite遇到的坑

2017-06-15 13:33:45

Sketchup文件纹理提取

除了材质上的颜色,材质上的纹理(Texture)是我们最为关心的元素。控制纹理能够在Face上正确的显示,可以由两个方式控制:1)修改texture coordinates(UVQ)的值2)修改Texture上的Scale从Sketchup的SDK可以获取上面的两个数据,并且Sketchup是同时使用上述两种方案。

2017-05-18 11:10:13

可变参数宏与枚举

可变参数的宏与枚举结合会产生什么样子的火花?有时候定义了枚举需要知道枚举值对应的字符串表达,有点像反射的机制。该如何简洁的实现而又不容易出错?

2017-04-13 11:48:35

Web Worker Best Practices

使用Web Worker可以把一些比较计算量相对大的阻塞浏览器响应的计算放在单独的线程里计算。请求优化构造Worker的时候需要给定js的链接URL,worker内部请求js运行代码。假如worker有若干个,但使用同一个js文件,也仍然会请求js多次。听起来就不是个好的方法。能够做到只请求一次worker js就最好了。那如何做到?使用window.URL.createObjectURL可以构造

2016-07-20 14:20:53

MFC误报内存泄露的修复

在debug状态退出程序的时候,VS会在输出窗口列出可能的内存泄露的地方。MFC中使用DEBUG_NEW能够更方便的定位泄露的地点。但假如MFC的dll释放“”过早“”,DEBUG_NEW记录的内存分配信息就会不灵了。那什么情况下导致MFC的DLL过早释放呢?有这样一种情况:以#pragma comment(lib, _LIBNAME_)方式link一个依赖MFC的lib。比如在使用BCGCont

2016-07-02 21:52:18

以传值方式传参数引发的栈溢出

考虑到性能问题,如果是自定义的class对象,一般都会以传引用/地址的方式传递参数。如果按照这样的信条写程序,就不会遇到下面遇到的问题了。最近在帮一个朋友查看一个bug,现象是这样的:执行一个函数的时候,抛出一个stack overflow的异常。在函数体的第一行设置端点,执行的时候,程序停止响应。在函数外部设置断点,step in根本就进不去。细一看,这个函数以传值的方式传入了一个自定义的对象,

2016-07-02 11:24:25

大规模WebGL应用引发浏览器崩溃的几种情况及解决办法

一般的Web应用基本上不会导致浏览器崩溃,写Javascript代码也不需要管理内存资源,基本也不需要考虑内存“泄露”的问题。随着H5的崛起,越来越多的原本在桌面端的软件也改头换面迁移到Web上来,比如三维图形类的应用。在Web端显示大规模三维模型不仅仅是三维显示引擎的问题,也涉及到数据组织、任务调度、资源管理、浏览器兼容等方方面面。这里针对在项目中遇到到几种把浏览器高挂的情况简要列举了一下。

2016-06-04 17:17:00

Vulkan的分层设计

Vulkan驱动层提供了简单高效的API。作为Vulkan API的使用者,我们要严格遵循Vulkan API的使用规则。如果我们违反了这些规则,Vulkan只会返回很少的反馈,它只会报告一部分严重和重要的错误,比如内存不够啦、指针越界啦等等。如果我们想获取其他更多的错误提示信息怎么办?这就需要启用Vulkan 的“调试验证层"。 调试验证层由多个层组成的,可以根据需要搭配,比如内存使用情况、输入参数验证、对象生命周期检查等等。开启越多的调试和验证功能,就意味着程序会越慢。这些功能在程序调试和查找bug

2016-05-11 10:09:09

异步请求引发的Chrome死锁

浏览器支持的并发异步请求数目是有限的,当需要的资源过多时候(远远大于并发数目),就需要自己管理XHR请求。在实现自己的XHR的Manger时候,当请求数目达到2000多的时候,经常会遇到chrome的xhr状态为pending的情况。开始猜测是不是因为请求的数目太多所致。于是测试顺序请求2000多的xhr,结果chrome正常工作。检查自己的代码后发现,原来是存在同一资源同时请求的情况。在这种情况

2016-04-15 15:45:54

dynamic initializer和全局变量

“慎用全局变量,包括全局静态变量“ 是众所周知的原则,因为全局变量除了会增加程序的维护成本。如果全局变量是个复杂的对象,并且还使用其他的全局变量,那情况就变得复杂的多。因为全局变量初始化的顺序不是coder所能掌控的。而初始化全局变量就是所谓的”dynamic initializer“,即动态初始化。把全局变量局部化,可以解决全局变量之间的依赖引起的初始化顺序不确定的问题。比如:static OS

2016-03-23 15:26:09

Vulkan API基本概念

Instance具体的Vulkan应用由“实例”表示。一个程序中可以创建多个实例,实例之间相互独立,互不干扰。Vulkan实例由驱动装载器(loader)管理。装载器负责发现GPU设备,是多设备驱动的组合体。当调用API创建Vulkan实例的时候,Vulkan SDK内部会经由loader查找GPU设备。创建Vulkan实例需要两个输入信息:  应用程序的信息  内存分配回调函数Vulkan通过用

2016-03-05 22:36:30

初识Vulkan

Vulkan是Khronos组织制定的“下一代”图形显示API,是与DirectX12可以匹敌的GPU API标准。目前,Vulkan 1.0标准已经完成并正式发布。上一代的OpenGL|ES并不会被遗弃,还会继续发展,很有可能OpenGL|ES变为Vulkan的简化API。

2016-03-05 14:47:27

ActiveMQ + NodeJS + Stomp 极简入门

前提 安装ActiveMQ和Nodejs测试步骤1.执行bin\win32\activemq.bat启动MQ服务2. 打开http://localhost:8161/admin/topics.jsp用户名和密码都是 admin3. 下载Stompnpm install stomp-client4. js的测试代码var Stomp = require('stomp-client');var de

2016-01-30 17:14:01

优化Javascript数据遍历

问题M是一个对象的集合,没个对象拥有唯一的字符串类型的IdN是Id的集合。从M中过滤掉Id不在N中的对象。假如M有50w个数据,N中可能是0~50w任意的数据。方案1使用数组保存Id的集合。这样就有两种方式遍历1.1 N = [id, ...];for(var m in M)   for(var n in N){ .....}1.2for(var m in M)    if(N.indexOf(m

2016-01-26 16:51:56

使用std::vector优化点云动画显示一例

1. 准备使用std::vector应该知道几点:(1)内存连续的容器,有点像数组(2)与std::list相比,插入和删除元素比较慢- 因为数据迁移(3)添加元素可能会引发内存分配和数据迁移。2. 问题AnyCAD::API::PointCloudNode使用FloatList  及std::vector来存储一些列的点[x0, y0, z0, x1, y1, z1, .....]:void S

2015-11-03 16:37:17

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。