2023年最全盘点

2023-11-13

WinForm、WPF、MFC、wxWidgets、Qt、GTK、 Electron

7款桌面应用程序开发框架盘点

7款桌面应用程序开发框架支持语言及支持平台

开发框架
支持语言
支持平台
WinForm   
C#
windows
WPF
C#、VB.NET
windows
MFC
C++
Windows、Linux和macOS
wxWidgets
C、C++、Python、.NET、Lua、Ruby等。
Windows、Linux和macOS等
Qt
C、C++、Python、Javascript等
Windows、Linux和macOS等
GTK
C、C++、 C#、 Python、 Java、 Perl、 .NET等。
Windows、Linux和macOS等
Electron
HTML、CSS 、 JavaScript等
Windows、Linux和macOS等

WinForm   :

WinForm是一种用于创建Windows桌面应用程序的开发技术。它是基于.NET Framework的,可以帮助开发者使用拖放方式来快速创建用户界面。

WinForm   优点:

  1. 用户体验:界面响应速度快,控件灵活
  2. 安全性:充分利用了.NET Framework的安全机制,使得开发出的应用程序具有较高的安全性和稳定性。
  3. 开发便利:Winform开发的程序比较容易发布和共享,安装即可使用,简化了程序发布和部署。

WinForm 缺点:

  1. 开发难度大 :WinForm的开发复杂度高,需要掌握多种技术才能开发出高质量的应用程序,对于初学者来说难度较大。
  2. 界面风格单一 :WinForm的界面风格比较单一,无法提供多种样式供开发者选择,展现出来的风格比较单调,不美观。
  3. 功能复杂度低 :Winform的功能相对简单,适合一般的应用程序设计,但面对复杂的应用设计时就有些不太适用。

WPF:

WPF 的核心是一个与分辨率无关且基于矢量的呈现引擎,旨在充分利用现代图形硬件。 WPF 属于 .NET,因此可以生成整合 .NET API 其他元素的应用程序。

WPF优点:

  1. 强大的图形能力 :WPF基于Direct3D技术,能够将2D和3D图形、文字等内容转换为3D三角形、材质和其他Direct3D对象,并由硬件负责渲染,从而更好地利用系统的图像处理单元GPU,获得硬件加速的好处。这使得WPF能够提供超乎想象的图形效果。
  2. XAML的引入 :XAML是一种声明式语言,使得美工和程序可以实现分离,使得定制化主题、外观和行为更加方便也易于维护。
  3. 强大的数据绑定功能 :WPF支持强大的“数据绑定”功能,使得MVVM(Model-View-ViewModel)设计模式得以实现。
  4. 样式管理 :WPF的样式(Style)可以应用不同的样式到不同的控件,而且易于管理。
  5. 易于使用和学习 :WPF基于.NET框架,使用C#或者 VB.NET 进行编程,对于开发人员来说,可以更加专注于程序的实现,而不需要为了界面而花费太多时间。
  6. 整合开发环境 :WPF整合了web开发和windows开发的模式,web的界面开发使用的HTML和 ASP.NET 服务器组件的标签式语言,而XAML也是标签语言,这为开发人员提供了方便。

WPF缺点:

  1. 资源占用较多 :WPF是基于Direct3D技术创建的,这意味着它会占用较多的系统资源。
  2. 界面自定义的代价较高 :虽然WPF支持XAML和样式的自定义,但要实现高度自由的界面自定义需要付出较大的代价。
  3. 学习曲线较陡峭 :虽然WPF提供了丰富的功能和特性,但它也有较高的学习曲线。
  4. 不支持跨平台开发 :WPF是专为Windows平台设计的UI框架,不支持跨平台开发。

MFC:

MFC是由Microsoft提供的一种基于C++的库,具有成熟的UI控件和良好的性能,可以用于构建高效的Windows桌面应用程序。

MFC优点

  1. 面向对象 :MFC采用了面向对象的方法来封装Windows API,这种方法使得开发应用程序变得更加便捷。
  2. 跨平台 :虽然MFC是微软开发的专有框架,但可以在多个平台上运行,包括Windows、Linux和macOS等。这使得使用MFC开发的应用程序具有较高的可移植性。
  3. 强大的功能 :MFC提供了丰富的功能和特性,例如文档/视图架构、控件、网络编程、数据库连接、多媒体支持等。这些功能可以帮助开发者快速构建各种类型的应用程序。
  4. 高效的内存管理 :MFC对内存管理进行了优化,采用了许多技术来减少内存泄漏和优化性能。这使得使用MFC编写的程序具有较高的执行效率和较低的资源占用。
  5. 大量的学习资源 :由于MFC是微软的官方框架,因此它有着丰富的学习资源,包括官方文档、示例代码、在线论坛等。这使得开发者可以方便地学习和使用MFC,并且可以在遇到问题时得到及时的帮助。

MFC缺点:

  1. 学习曲线较陡 :尽管MFC封装了Windows API的复杂性,但对于初学者来说,学习MFC仍然需要一定的时间和精力。MFC的类体系较为庞大,其中涉及的概念和技术也比较复杂,需要开发人员具备一定的C++编程知识和经验。因此,对于初学者来说,学习MFC可能会感到吃力。
  2. 性能问题 :由于MFC是一个相对底层的框架,它使用了大量的Windows API调用来实现各种功能。这些调用会引入一定的性能开销,特别是在处理大量数据或进行复杂计算的情况下。因此,在对性能要求较高的应用场景下,可能需要使用其他更为高效的编程框架。
  3. 过时的API :MFC的一些API已经过时,没有得到及时的更新和改进。这使得开发者在使用这些API时可能会遇到兼容性问题,并且难以找到相关的文档和资料。
  4. 不支持多线程 :MFC在多线程方面的支持较弱,这使得开发者在开发多线程应用程序时可能会遇到困难。尽管可以使用Win32 API和其他技术来实现多线程,但这会增加开发难度和代码复杂性。
  5. 难以定制 :MFC提供了一个相对固定的应用程序框架,这使得开发者难以对其进行深度定制。如果开发者需要使用一些MFC不支持的功能或者自定义界面,可能需要花费大量的时间和精力来修改框架代码,这可能会增加开发成本。

wxWidgets:

wxWidgets是一个开源的跨平台的C++框架库,用于开发GUI和其它工具。

wxWidgets优点:

  1. 本地外观 :wxWidgets提供本地的外观,使用wxWidgets编写的应用程序在不同的平台上可能会有不同的外观,但它们会与该平台的原生应用程序相似。
  2. 跨平台性 :wxWidgets是一个跨平台的应用程序框架,可以在Windows、Linux、macOS等多个操作系统上使用。
  3. 完全免费 :使用wxWidgets编写软件,不论是个人还是商业用途,都是完全免费的。
  4. 易用性 :wxWidgets提供了易于使用的API,这些API是面向对象的,可以使得开发人员更容易地创建GUI应用程序
  5. 可扩展性和灵活性 :wxWidgets具有高度的可扩展性和灵活性。它支持使用各种C++编译器进行编译,并且可以使用许多流行的工具和库来扩展其功能。
  6. 社区支持 :wxWidgets拥有一个活跃的社区,这个社区提供了丰富的资源和支持,包括论坛、邮件列表和博客等。
  7. 持久性和兼容性 :随着计算机业的不断发展,wxWidgets框架也随之不断的更新,使得基于wxWidgets框架的程序能够轻松移植到最新最好的系统平台上去。

wxWidgets缺点:

  1. IDE支持不足 :尽管wxWidgets提供了大量的组件,但没有强大的IDE支持,这使得大型系统的开发变得更加困难。
  2. 对双字节字符支持不理想 :wxWidgets中的某些组件,如xml组件,无法识别双字节字符,如汉字。这可能导致在处理某些国际化字符时出现问题。
  3. 学习和使用难度较高 :虽然wxWidgets提供了易于使用的API,但其功能和组件非常丰富,对于初学者来说可能有一定的学习难度。
  4. 商业授权问题 :虽然wxWidgets是开源免费的,但对其进行的商业使用可能会遇到授权问题。

Qt:

Qt是一种用于创建跨平台应用程序的C++框架,Qt不仅支持传统的桌面应用程序开发,还广泛应用于嵌入式设备、移动设备和Web应用程序等领域。

Qt优点:

  1. 跨平台 :Qt支持几乎所有的平台,包括Windows、Linux、macOS等,这使得开发者可以轻松地为自己的应用程序创建跨平台的用户界面。
  2. 易学易用 :Qt的API设计简单而直观,易于使用。它提供了一套清晰的类层次结构,使开发人员能够轻松地创建和管理GUI组件。
  3. 强大的社区支持 :Qt有一个活跃的社区,为开发者提供了丰富的资源和支持。
  4. 面向对象 :Qt是面向对象的,这使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
  5. 良好的内存管理 :Qt在一定程度上简化了内存回收机制,提高了内存管理的效率。
  6. 高效的开发 :Qt的开发效率非常高,能够快速的构建应用程序。
  7. 支持嵌入式开发 :Qt可以用于嵌入式开发,这使得开发者可以将其应用于各种智能设备和其他嵌入式应用。
  8. 丰富的API :Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/O device、directory management和date/time类,甚至还包括正则表达式的处理功能。
  9. 支持2D/3D图形渲染和OpenGL :Qt支持2D/3D图形渲染和OpenGL,这为开发者提供了强大的图形处理能力。

Qt缺点:

  1. 过度封装 :Qt的封装性较强,这使得一些开发者可能会觉得Qt的某些功能不够灵活,过于约束。
  2. 体积较大 :相比其他一些桌面应用程序框架,Qt的体积可能较大,这可能会在一定程序上影响程序的启动速度和运行效率。
  3. 执行效率 :尽管Qt的执行效率相对MFC等框架有所提高,但如果与原生的Windows程序或C++程序相比,Qt程序的执行效率可能稍逊一筹。
  4. 需要编译Qt核心DLL :在发布程序时,需要将Qt的核心DLL文件一起打包,否则程序将无法运行。这可能会增加程序的发布成本和难度。
  5. 不适合移动端开发 :尽管Qt可以用于开发桌面应用程序,但它并不适合用于开发移动端应用程序。

GTK:

GTK,全称The GIMP Toolkit,是一套开源的跨平台的C语言图形界面库,主要用于创建图形用户界面(GUI)。

GTK优点:

  1. 跨平台 :GTK是一套跨平台的图形界面库,可以在多种操作系统上运行,包括Windows、Linux、macOS等。
  2. 直观的API设计 :GTK的API设计简单而直观,易于使用。
  3. 现代化和积极维护 :GTK的开发和维护都非常积极,社区活跃,遇到问题或需要帮助时,可以从社区得到及时的响应和解答。
  4. 灵活性和可扩展性 :GTK具有良好的设计,既灵活又可扩展。
  5. 多语言支持 :GTK支持大多数流行的编程语言,如C、C++、Perl、Python、Java、Objective-C、C#等。
  6. 开源和自由的许可证 :GTK是开源的,使用LGPL许可证,这意味着你可以免费地使用、修改和分发GTK源代码。

GTK缺点:

  1. 宏的大量使用 :GTK的开发语言C语言中大量使用宏,需要具备一定的宏定义和宏调用知识。
  2. 跨平台性能不足 :尽管GTK可以在多种操作系统上运行,但其跨平台性能仍存在不足。
  3. 界面设计缺乏灵活性 :虽然GTK提供了自定义界面设计工具,但相较于其他图形界面库,其界面设计灵活性仍有待提高。
  4. Glade使用限制 :Glade是GTK的界面布局工具,然而其功能相对较弱,只能做界面layout、绑定回调函数名字等基础工作,不能像Qt Quick那样直接使用脚本编写逻辑。

Electron:

Electron是一个开源框架,它允许使用Node.js(作为后端)和Chromium(作为前端)完成桌面GUI应用程序的开发。

Electron优点:

  1. 多平台开发 可以同时开发 Mac、Windows 和 Linux 三大平台的桌面应用,无需进行多次编译。
  2. 前端技术栈 :Electron 基于 Web 前端技术,前端开发者使用熟悉的技术(如 HTML、CSS 和 JavaScript)即可开发桌面应用。
  3. 执行效率高 :如果前端代码写得足够优秀,Electron 应用完全可以做出与 C++ 应用相媲美的用户体验。
  4. 立足于 JavaScript 生态 : Electron 可以使用几乎所有的 Web 前端生态领域及 Node.js 生态领域的组件和技术方案。

Electron缺点:

  1. 底层交互差 :对于一些操作系统级别的 API,Electron 无法直接调用,需要使用 Node.js 的 API 进行封装。
  2. 性能差 :Electron 的运行效率不如原生应用,尤其是在处理大型文件、进行复杂计算等方面。
  3. 包体积大 :由于 Electron 包含了一个完整的 Chromium 和 Node.js 环境,所以 Electron 应用的包体积相对较大,这对于一些需要频繁发布更新的应用来说可能会带来一些不便。
  4. 学习曲线陡峭 :对于一些没有 Web 前端开发经验的人来说,需要花费一定时间来学习 Electron 的相关技术和 API。
  5. 调试和测试不便 :由于 Electron 是基于 Web 前端技术的,因此对于一些特定的桌面应用场景来说,调试和测试可能会比原生应用稍显复杂。
每个框架都有自己的优缺点, 根据自己的需求,选择一个最熟悉的语言,行动起来吧!
实践大于一切真理!
以上7款跨端框架,你都知道多少呢?欢迎在评论区留言及讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023年最全盘点 的相关文章

  • 在电子中播放本地mp4文件

    我正在尝试开发一个小应用程序 其中我首先通过以下方式捕获屏幕aperture包 然后尝试使用在屏幕上显示它video tag 我通过以下方式捕获屏幕 import apertureConstructor from aperture cons
  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

    我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊 我正在使用 CGAL 库 我找不到如何从 apollonius 获取面和顶点的好例子 我有以下类型定义 typedef double NT typedef CGAL Cartesian lt N
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 如何使QTableView类的restoreState()和saveState()正常工作?

    首先 我想说 我的问题已经在这里讨论过 并且这里是 https stackoverflow com questions 1163030 qt qtableview and horizontalheader restorestate 但答案并
  • “Electron”中“BrowserView”和“renderer” React 页面之间的消息

    我正在尝试弄清楚如何在两者之间交换消息main过程和BrowserView 我一直在使用ipc在 之间main过程和renderer 简单 的过程react renderer page 但现在 使用相同的技术 我在console of th
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • QSerialPort 中的 readAll() 不包括最后发送的响应

    我正在使用 Qt 来控制串行设备 如果我向串行设备发送命令 我会执行类似的操作serial gt write command r n 我制作了一个按钮 它将纯文本小部件内的文本更改为串行端口的响应 为了获得串口的响应 我使用serial g
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table

随机推荐

  • css如何实现盒子在鼠标点,掌握CSS定位,才能让“盒子”飞得更高更远更稳

    众所周知 前端CSS中 盒模型 浮动 定位为必须掌握的三座大山 今天就来聊聊定位的那些事 定位是什么 先来看看哪些场景用到定位 如下图所示 凡是有盒子压住另一个盒子的地方都可定位 因为用浮动做不了 如果盒子浮动 会并排但不会出现有层级的观感
  • STM32F4 IAP

    功能实现 正常上电或复位后运行用户Bootloader程序 检查变量存储区的标志位 如果标志位为APP FLAG则跳转到APP程序运行 如果标志位为BOOT FLAG 则运行用户Bootloader程序 等待接收文件并准备IAP升级后跳转到
  • (数据挖掘-入门-8)基于朴素贝叶斯的文本分类器

    主要内容 1 动机 2 基于朴素贝叶斯的文本分类器 3 python实现 一 动机 之前介绍的朴素贝叶斯分类器所使用的都是结构化的数据集 即每行代表一个样本 每列代表一个特征属性 但在实际中 尤其是网页中 爬虫所采集到的数据都是非结构化的
  • Android界面设计:Material Design之下拉刷新

    目录 下拉刷新的核心类 SwipeRefreshLayout 下拉刷新的核心类 SwipeRefreshLayout 下拉刷新这种功能并不是什么新鲜的东西 所有的应用里都会有这个功能 把想要实现下拉刷新功能的控件放置到SwipeRefres
  • 【每日一题】字符串中找出连续最长的数字串(字符串、贪心)

    题目来源 牛客网 链接 字符串中找出连续最长的数字串 题目描述 读入一个字符串str 输出字符串str中的连续最长的数字串 输入描述 测试输入包含1个测试用例 一个字符串str 长度不超过255 输出描述 在一行内输出str中里连续最长的数
  • 数仓建模理论——高质量数据建模

    数仓质量 数据模型的概念和意义 DIKW 低质量数据模型十宗罪 低质量数据模型的影响 数仓必备技能 1 建模基础 实体 2 建模基础 属性 Attribute 3 域 Domain NULL值的处理 规范化 范式 第一范式 原子性 没有重复
  • 不归零法编码、曼彻斯特编码和差分曼彻斯特编码

    数字信号和数位化编码的数据之间存在着自然的联系 数位化存储的数据表现为0和1的序列 由于数字信号能够在两个恒量之间交替变换 所以可以简单地把0赋予其中的一个恒量 而把1赋予另一个恒量 这里恒量的具体取值并不重要 如果是电子信号的话 这两个恒
  • Struts2 S2-062(CVE-2021-31805)漏洞分析及复现

    简介 2022年4月12日 Apache发布安全公告 修复了一个Apache Struts2 中的远程代码执行漏洞S2 062 CVE 2021 31805 攻击者可以利用此漏洞来控制受影响的系统 该漏洞是由于 2020 年 S2 061
  • 2016xctf一道ctf题目

    首先是index php
  • CUDA中__syncthreads()和__threadfence_block()和__trheadfence()

    作为cuda小白 我看完书上对这三个函数的解释 仍然不懂 于是做了以下几个实验来理解这三个函数的使用区别 我们先来看看 threadfence block 是在干啥 这个实验非常简单 A数组的长度为1024 一个block的大小 先往A 0
  • 文件上传之.htaccess绕过黑名单——upload-labs靶场第四关

    今天继续给大家介绍渗透测试相关知识 本文主要内容是介绍 htaccess绕过黑名单的文件上传方法 并借助upload labs靶场的第四关进行了实战 免责声明 本文所介绍的内容仅做学习交流使用 严禁利用文中技术进行非法行为 否则造成一切严重
  • springboot 获取当前日期_spring-boot 日期转换

    在springboot里面有的小伙伴可能遇到过这样一个问题 通过表单提交发送请求 后台用一个对象接收 类似String int Long这样的都能正常接收 一旦有日期类型的 Date 的 无法正常接收 甚至连方法也没有进入 给人一种没有提交
  • SQLmap使用教程图文教程(超详细)

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 SQLmap 一 目标 1 指定url 2 指定文件 批量
  • 反转链表(牛客网)

    注意点 空间复杂度为 1 就是说只能原地反转 自己的代码 public class ListNode int val ListNode next null ListNode int val this val val public class
  • Linux网络常用命令(ifconfig/ethtool/nmon+n)

    Linux网络常用命令 ifconfig可设置网络设备的状态 或是显示目前的设置 ethtool 是用于查询及设置网卡参数的命令 服务端监控工具 nmon nmon可监控的数据类型 ifconfig可设置网络设备的状态 或是显示目前的设置
  • 【路径规划】(1) Dijkstra 算法求解最短路,附python完整代码

    好久不见 我又回来了 这段时间把路径规划的一系列算法整理一下 感兴趣的点个关注 今天介绍一下机器人路径规划算法中最基础的 Dijkstra 算法 文末有 python 完整代码 那我们开始吧 1 算法介绍 1959 年 荷兰计算机科学家 E
  • QSPI 几种模式理解

    NOR FLASH 和NAND FLASH 区别 Nor Flash 写入和擦除的速度低 结构复杂 成本高 存储容量较小 一般用于存储Bootloader以及操作系统或者程序代码 可以在芯片内部直接运行代码 NAND Flash 写入和擦除
  • Python将图片插入到Excel中

    效果图 安装 命令 pip install XlsxWriter 或者 easy install XlsxWriter 在下载的过程中慢的话 可以尝试其中一个 速度会比单纯的pip快10倍不止 地址如下 http pypi douban c
  • ETL增量抽取方案

    一 ETL体系结构 数据库 gt 抽取 gt 转换 gt 加载 gt 目的数据源 二 ETL抽取方案 1 全量抽取 全量抽取类似于数据迁移或数据复制 它将数据源中的表或视图的数据原封不动的从数据库中抽取出来 并转换成自己的ETL工具可以识别
  • 2023年最全盘点

    WinForm WPF MFC wxWidgets Qt GTK Electron 7款桌面应用程序开发框架盘点 7款桌面应用程序开发框架支持语言及支持平台 开发框架 支持语言 支持平台 WinForm C windows WPF