- 博客(91)
- 资源 (9)
- 收藏
- 关注
原创 (六)async 和 await 关键字
线程同步:确保多线程访问共享资源时不会发生冲突。异步处理机制:通过让程序执行耗时操作时不阻塞线程,提高程序的效率和响应性。线程池:重用线程池中的线程来执行多个任务,减少线程创建和销毁的开销。异步 I/O:在进行 I/O 操作时不中断程序,允许继续执行其他任务,增强程序的响应性。:简化异步编程的方式,使异步代码更加易读、易维护,同时避免了线程阻塞和死锁。这些机制使得 C# 在处理并发和异步操作时非常灵活和高效,能够显著提高程序的性能和用户体验async和await。
2025-01-14 19:09:03
1072
原创 (五) 异步 I/O(Asynchronous I/O)
异步 I/O 操作指的是在进行 I/O 操作时(如文件读取、网络请求等),不需要等待操作完成才能继续执行后续代码。相反,程序可以在等待 I/O 完成的同时去执行其他任务,从而提高整体的效率。在 C# 中,使用Task类与异步 I/O 配合,可以高效地执行 I/O 操作。:使用Stream类进行异步文件读取。通过await在执行时不会阻塞线程,而是允许其他操作继续进行,直到文件读取完成。是一种用于优化I/O操作的技术,它允许程序在等待I/O操作完成时不阻塞线程,从而提高系统的响应能力和吞吐量。
2025-01-14 19:02:54
990
原创 (四)线程池(Thread Pool)
在C#中,线程池(ThreadPool)是一个用于管理线程的技术,目的是减少线程创建和销毁的开销,并提高性能。面试官在面试时,可能会针对线程池提出一些问题,通常会考察候选人的理解、应用能力以及对性能优化的认识。
2025-01-14 18:38:20
822
原创 (二)异步处理机制(Asynchronous Processing)
异步处理机制是一种编程模式,允许程序在处理耗时任务(如文件读写、网络请求、数据库操作等)时,不阻塞当前线程的执行,从而提高程序的效率和响应性。异步处理机制是一种编程模式,允许程序在处理耗时任务(如文件读写、网络请求、数据库操作等)时,不阻塞当前线程的执行,从而提高程序的效率和响应性。它适用于耗时的操作(如 I/O 操作、数据库查询等),通过避免阻塞主线程来提高程序的响应性和性能。C# 的异步 I/O 提供了一种高效的方式来处理文件、网络等操作,避免线程阻塞。是表示异步操作的核心类。关键字是异步编程的核心。
2025-01-14 11:38:44
1258
原创 (一)线程同步(Thread Synchronization)
线程同步的目的是保证多个线程在访问共享资源时不会发生冲突或不一致。线程同步可以避免竞态条件,确保多个线程按照预期顺序执行,避免数据丢失或不一致。
2025-01-14 11:02:10
972
原创 CancellationTokenSource
是 .NET 中用于实现任务或异步操作的的一个核心类。通过它,我们可以向异步任务发送取消信号,从而安全地终止任务的执行,避免不必要的资源消耗。Cancel。
2024-12-25 12:49:07
349
原创 WPF 所有的控件和每个控件的主要作用和应用场景
WPF 提供了功能强大的控件集,适用于从简单的用户界面到复杂的数据展示和交互。通过使用这些控件和布局容器,可以灵活构建现代化的桌面应用程序。每个控件都有特定的应用场景,了解其用途可以帮助开发人员更好地设计和实现应用程序的用户界面。
2024-09-20 16:06:58
1838
原创 WPF 异步
WPF 中的异步操作通过asyncawait和Task类实现,能够防止 UI 冻结,提升用户体验。异步任务中的 UI 更新需要通过Dispatcher切换到 UI 线程。和分别提供了任务取消和进度报告的支持。使用异步编程可以更高效地处理 I/O 密集型任务和计算密集型任务,同时保持 UI 的响应性。
2024-09-19 20:48:22
1271
1
原创 WPF 中的线程池
WPF 中可以通过 ThreadPool或 Task来执行后台任务,保持 UI 线程的响应性。任务完成后,必须通过 Dispatcher切换回 UI 线程更新 UI 控件。Task提供了更灵活的功能,推荐使用 Task和 asyncawait来处理异步任务。使用 CancellationToken机制可以取消正在进行的异步任务,提升用户体验。这些技巧可以帮助开发者在 WPF 应用中高效处理多线程任务,确保应用性能和响应性。线程池主要是为了解决什么问题,原理是什么。
2024-09-19 20:42:47
1516
原创 WPF经典面试题全集
以上这些问题涵盖了WPF的核心概念和高级功能,包括数据绑定、依赖属性、MVVM 模式、资源管理、动画、主题切换以及拖放操作等。这些知识点对于理解和深入掌握WPF开发至关重要,同时也是面试中常见的考察点。
2024-09-19 20:31:53
4004
原创 PyTorch 和 TensorFlow
PyTorch是由 Facebook AI Research (FAIR) 开发的开源深度学习框架,以其易用性和灵活性著称。它基于动态计算图,允许用户在模型训练时动态改变网络结构,这使其在研究和开发阶段尤为受欢迎。TensorFlow是由 Google Brain 开发的开源深度学习框架。它是一个支持大规模分布式计算的框架,最初设计用于生产环境中的部署,同时也是工业界应用的主流框架。特性PyTorchTensorFlow计算图动态计算图(即时执行)
2024-09-11 20:58:49
1337
原创 Computer Vision的学习路线
计算机视觉的学习路线通常从基础的数学知识和图像处理开始,逐步深入到经典的视觉算法和深度学习模型,再扩展到复杂的应用场景和前沿研究。这个学习路径将帮助你从入门到精通,最终能够独立完成计算机视觉项目,并跟上领域的最新进展。
2024-09-11 20:56:09
1097
原创 WPF 依赖属性与附加属性(面试长问)
依赖属性是一种特殊的属性,它提供了增强的功能,比如数据绑定、动画、样式、属性继承等。它通常定义在控件类中,控件类通过方法注册依赖属性,并通过GetValue和SetValue方法获取或设置依赖属性的值。附加属性是一种特殊类型的依赖属性,它允许某个类为其他类定义属性,通常用于布局控件中,以便为其子元素提供额外信息。附加属性本质上是依赖属性,但它们可以附加到其他类的实例上,这意味着附加属性的所有者并不是实际使用该属性的对象。特性依赖属性(Dependency Property)
2024-09-11 20:17:35
1646
原创 WPF 面试经典题目
在 C# 的 WPF 应用程序中,依赖属性(Dependency Property)是一个特殊的属性类型,它是 WPF 中数据绑定、样式、动画和模板机制的核心。依赖属性的主要特点包括:存储:依赖属性的值存储在一个专门的存储体系中,不是直接存储在对象的字段中。数据绑定:支持数据绑定,可以从绑定的数据源自动更新。默认值:可以为依赖属性定义默认值。样式和模板:可以通过样式和控件模板对依赖属性进行控制和修改。变更通知:依赖属性在值更改时可以触发事件,从而实现自动更新UI。定义依赖属性的步骤:定义:在类中使用 类型
2024-09-04 18:38:52
1665
原创 Assembly 跨域通信AppDomain
通过AppDomain实现跨域通信是一种强大的方式,尤其在需要隔离不同组件、插件或不受信任代码的场景下。然而,使用AppDomain也带来了额外的复杂性和性能开销。在 .NET Core 和 .NET 5+ 环境下,由于AppDomain的功能被简化,可能需要采用其他技术方案来实现类似的隔离和通信需求。Assembly在跨域通信中的应用场景主要集中在隔离、动态加载、不受信任代码执行和版本管理等方面。通过使用AppDomain。
2024-09-03 20:11:08
1345
原创 C# Assembly
Assembly在 C# 和 .NET 开发中有广泛的应用场景,涵盖了从插件系统、反射、嵌入资源管理到跨域通信等多个方面。通过灵活地使用Assembly,可以大大增强应用程序的扩展性、灵活性和动态性。使用Assembly提供了动态加载代码、反射、嵌入资源和版本控制等强大的功能,这些功能极大地增强了应用程序的灵活性和扩展性。然而,这也带来了代码复杂性、安全风险、性能影响等问题。开发者在使用Assembly时需要权衡这些优缺点,确保在合适的场景中使用它,并采取适当的措施来缓解潜在的风险。
2024-09-03 20:05:46
1793
原创 Thread中的ApartmentState
单线程公寓模型,每个线程在其生命周期内只处理一个消息队列,适用于需要对 COM 对象进行单线程访问的场景,例如 WPF 和 Windows Forms 的 UI 线程。属性用于设置线程的线程公寓状态(Apartment State),它对于线程的线程模型和与 COM 组件的交互有重要影响。:多线程公寓模型,多个线程可以同时处理 COM 对象,不需要消息队列,适用于需要高并发或需要跨线程操作的场景。在创建新的线程时,如果你的线程需要与 STA COM 组件交互,你需要设置。属性是只读的,无法在运行时更改。
2024-09-03 11:02:35
1065
原创 Action 作为参数,对方法进行传参的写法
无参数的ActionAction。带一个参数的ActionAction。带多个参数的Action, 等等。异步操作:使用Func来处理异步操作的Action。通过使用Action委托,你可以将方法作为参数传递,灵活地处理各种逻辑,并使代码更加模块化和可维护。
2024-09-02 18:52:11
585
原创 计算机系统-内存与CPU
内存(Memory),通常指随机存取存储器(RAM, Random Access Memory),是计算机系统中的一种高速存储器,用于临时存储当前正在使用的数据和程序。同样,硬盘或SSD存储计算机中的所有文件和程序,但它们访问速度较慢,需要时才加载到内存中。内存(RAM)可以类比为一个办公桌或工作台,它在计算机中起到的作用类似于你在工作时用来放置和处理当前工作资料的地方。总结来说,内存相当于计算机的工作空间,它决定了你在工作时可以同时处理多少文件和信息,以及处理这些信息的效率。
2024-08-27 19:06:34
1592
原创 WPF UserControl 进行界面绑定,怎么进行内存释放
当你在一个界面中多次创建相同的下面是一个示例演示如何在一个窗口中创建三个相同的实例,每个实例绑定不同的数据,并在需要时释放当前页面的内存。
2024-08-26 17:12:29
4919
原创 WPF 怎么样使用缓存
缓存是提升WPF应用性能的有效手段,合理使用缓存可以显著减少内存使用、提高响应速度和减少资源的重复加载。在实际应用中,应该根据具体的业务需求选择合适的缓存策略,并考虑缓存的过期和清理机制,以确保应用的高效运行。
2024-08-22 20:36:30
883
原创 做个一套C#面试题
在以下情况下,自定义类型需要重写 Equals 函数:需要重写 Equals 的情况值相等逻辑:当你需要定义两个对象的“值相等”逻辑,而不仅仅是引用相等(即默认情况下的相等)。例如,在比较两个包含相同数据但不同引用的对象时,它们应该被认为是相等的。集合操作:当你的对象将用于集合(如哈希表、字典、哈希集)中,需要基于值进行比较和操作时。例如,想要在集合中避免重复对象,或者根据对象值进行查找。为什么需要同时重写 GetHashCode。
2024-08-09 01:35:38
981
原创 热加载和冷加载
安装自定义组件安装自定义组件通常包括将组件的程序集加载到应用程序域,并根据需要初始化和配置组件。加载程序集使用或其他加载方法加载自定义组件的程序集。初始化组件根据组件的设计,执行初始化操作,如创建对象实例、注册服务、配置组件属性等。使用组件在应用程序中使用加载的组件,调用其方法或访问其属性。卸载自定义组件卸载自定义组件涉及从应用程序中移除组件的所有引用和资源,确保不再使用和占用系统资源。释放资源执行与组件加载和使用相关的资源释放操作,确保释放对象、关闭连接等。取消注册服务。
2024-07-29 00:05:48
802
原创 WPF父窗口中的UserControl 使用DataContext 绑定对应的ViewModel
WPF 界面中子元素 DataContext 绑定对应的ViewModel
2022-09-21 16:31:29
4053
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人