调试技术能够让新技术的学习事半功倍

2024-03-21 10:18

本文主要是介绍调试技术能够让新技术的学习事半功倍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

调试技术能够让新技术的学习事半功倍


我是WPF菜鸟。我要学WPF。

一种方法,是根据推荐的书籍,按照书籍的步骤,从Hello World开始,循序渐进,从event handling, data binding, style, template, graphic, resource等等一路练过来,然后,然后呢?

然后没了。然后可以看看MSDN上深入一点的文档,写个小程序什么的,再然后呢?

再然后就真的没了。

为什么说没了呢。因为接下来不知道做什么了。首先我不知道我是不是学全面了,其次就算我以为我学全面了,我能做个程序了,我也不知道我是用的方法是不是最优的。学一个东西,学到后来觉得没了,那是很让人失望的。

所以我觉得按照上面的方法来学WPF,肯定会让我非常不爽。

那我该怎么学呢?

首先是我为啥要学。导火索是现有的产品无法满足用户日益增长的需要了。日本A片都用蓝光碟了,说明用户对于视觉感官的渴望是非常强烈的。那WPF真的能满足这个需求么?WPF能发挥GPU的多少硬件特效?功能上支持关键部位打马赛克么?WPF的工作模型跟我现有的数据兼容么?WPF画图是实时的么,我开发游戏用WPF能达到直接用D3D的性能么?WPF出问题后我到什么地方找专家?如何制定性能指标跟其它技术比较?开发平台完善么?...

稍微具体点的问题比如有:

1. WPF支持数据和图像同步吗?比如我的数据源刷新速度比WPF的Render还快的时候,我有办法得知当前的Render状态,以便调整数据的获取速度吗?

2. 如果我的目标程序是一个DCOM Server,我需要在DCOM请求执行的时候通过GUI来显示执行状态。WPF的线程模型跟DCOM Server模型有冲突吗,使用WPF会带来 DCOM的性能下降吗?

3. 当频繁改变UI Tree结构的时候,怎样的做法才能够带来更高的性能,怎样的做法才能够避免UI的抖动呢?

如果手头的项目是非常重要,要花很多钱,上面这些问题往往是决定使用何种技术的关键。但事实情况是,就算我把亚马逊上WPF 4星半以上的书全部看一遍,WPF所有的feature全部学会,也无法回答得到上面问题的答案。

要回答上面的问题,其实需要两点:

1. 明确地知道你需要什么
2. 明确地知道WPF产品本身是如何工作的,而不是知道应该如何使用WPF

所以我重新制定的学习计划如下:

1. 会用WPF写一个hello world,以便做进一步研究的试验品
2. 尽可能多地通过比较深入的文章,比如WPF developer的blog,来了解WPF的实现细节
3. 针对我的需求,分析出WPF对应的实现细节。比如WPF通过怎样的方式把图像画到屏幕上,WPF的线程模型如何通信,WPF通过怎样的顺序传递消息,遍历UI tree,WPF如何优化重复绘图,WPF对Windows消息的依赖等等
4. 根据前三点获取的信息,根据MSDN中的介绍完成一个技术原形,测量该原形的工作是否跟预期相符合,反证前三步获取的信息是否准确
5. 把这些信息进行多方面的反馈和讨论,进一步完善原形,完成进一步的证实和检验
6. 根据前面的信息,决定是否使用WPF进行当前的开发。如果答案是肯定,那去亚马逊随便买本4星半的WPF教科书,快速学习如何使用WPF的各种feature

上面的计划,难点在第三步。除了微软以外,别人没有WPF的源代码,如何才能知道WPF的实现细节呢。如果你有钱,如果你是HP或者Citybank,你可以找微软的顾问,把你的问题交代给顾问,然后顾问会参考WPF的源代码,会跟WPF的developer讨论,最后告诉你WPF某些具体的技术是如何实现的。但是如果你是个人呢,或者你不想花钱,那对不起,你只有自己硬啃了。

这个怎么硬啃呢,自然是需要有技巧地啃了。调试工具在这个时候就会发挥出巨大的作用!

(哪怕手头有WPF的所有代码,其实还是没有调试器+reflector管用。要是不相信,你去打开VS下MFC,ATL和STL的代码,看看能学到多少东西)

下面是我结合调试器学习WPF的步骤。调试技术能够让学习事半功倍。

WPF起步(上) --- WPF是如何把图像画到屏幕上 
http://blog.csdn.net/eparg/archive/2007/12/11/1930357.aspx

WPF起步(中) --- 的main thread跟render thread如何通信
http://blog.csdn.net/eparg/archive/2007/12/11/1930363.aspx

WPF起步(下) --- WPF的画图请求是如何生成和派发
http://blog.csdn.net/eparg/archive/2007/12/11/1930368.aspx

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1930560


这篇关于调试技术能够让新技术的学习事半功倍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832412

相关文章

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1