为 WPF 或 WinForms 应用程序选择浏览器组件,对于那些搜索基于Chrome的解决方案的人来说,DotNetBrowser和CefSharp是最明显的选择 。
本文是我们的客户在考虑其项目的开源库和商业库时提出的最常见比较点的汇编。
引擎
CefSharp 实际上是 Chromium Embedded Framework (CEF) 的 .NET 包装器。 包装通过 C++/CLI 完成。
DotNetBrowser 在底层不使用 CEF 或 C++/CLI。 相反,它采用了自己的方法直接与 Chromium 集成。 它启动一个功能齐全的 Chromium 引擎,并通过进程间通信 (IPC) 与其进行通信。
架构
在 CefSharp 中,Chromium 引擎直接在您的 .NET 进程中初始化。 初始化和关闭都必须在主应用程序线程(通常是 UI 线程)中执行。 在不同的线程中调用它们通常会导致冻结。
此外,每个进程可以执行一次初始化和关闭。 这个限制来自 CEF 本身。 在执行关闭后尝试重新初始化 CefSharp 将导致错误。
DotNetBrowser architecture
在 DotNetBrowser 中,Chromium 引擎在单独的本机进程中进行初始化。 不需要在主 UI 线程上执行此操作——即使在工作线程中也可以执行此操作。
您可以同时初始化和使用具有不同配置的多个 Chromium 引擎,这在 CefSharp 中是不可能的。 您可以在不再需要 Chromium 时将其关闭并随时重新初始化。
DotNetBrowser architecture
稳定性和内存使用
在单独的进程中运行 Chromium 有更多优点:
1.在这种情况下,内存消耗要低得多,这对于 32 位应用程序来说似乎很关键。
2.在 CefSharp 中,如果 CEF 或 C++/CLI 绑定内部出现问 题,这将导致整个 .NET 应用程序崩溃而无法处理这种情况。 这就不太妙了,因为 .NET 应用程序可能会丢失或损坏用户的数据。
对于 DotNetBrowser,Chromium 内部的错误不会导致 .NET 应用程序崩溃。 此外,甚至可以在托管代码中正确检测和处理这一切。 例如,如果发生这种情况,那么您可以重新初始化 Chromium 并恢复用户会话。
应用程序域
由于其架构,CefSharp 不能在非默认 AppDomain 中使用 。 因此,它不能用于通过 VSTO 插件或 Excel-DNA 将 Chromium 嵌入到 Office 应用程序中。 Office VSTO 将加载项加载到单独的 AppDomain 中以进行隔离。
DotNetBrowser 在非默认 AppDomain 中运行。 事实上,可以在不同的 AppDomain 中创建多个 Chromium 引擎并同时使用它们。 因此,DotNetBrowser 可用于创建 VSTO 加载项。
AnyCPU
在针对 AnyCPU 的应用程序中使用 CefSharp 时,您会发现它在这些应用程序的 64 位环境中无法正常工作。
这儿有几个选项可以解决这个问题 。 其中之一是让您的应用程序始终在 32 位模式下运行,另一个更复杂,需要修改项目文件( .csproj 或 .vbproj)和代码。
在 DotNetBrowser 中,AnyCPU 支持开箱即用。 因此,不需要类似的调整。
H.264, AAC
视频和音频通常使用专有编解码器进行编码,例如 H.264 和 AAC。 此媒体无法在 CefSharp 中播放。
要在 CefSharp 中启用这些编解码器,您需要在启用专有编解码器的情况下自行重建 CEF。 这是一项相当复杂的任务,可能需要长达一个月的时间 。
在 DotNetBrowser 中默认禁用专有编解码器。 可以通过编程方式启用它们,而无需重建库:
IEngine engine = EngineFactory.Create(new EngineOptions.Builder
{
ProprietaryFeatures = ProprietaryFeatures.H264 | ProprietaryFeatures.Aac
}.Build());
安全
Chromium 通过利用操作系统为它们提供的安全性来限制其渲染器和实用程序进程。 此功能称为 Chromium沙箱 。 其主要目的是防止第三方代码对计算机进行持久更改或访问机密信息。
CefSharp 不支持 Chromium 沙箱 。 这个限制来自 CEF 本身。
DotNetBrowser supports the sandbox and enables it by default. It can be disabled during initialization if necessary.
DotNetBrowser 支持沙箱并默认启用。 如有必要,可以在初始化期间将其禁用。
CefSharp 在 .NET 进程中启动 Chromium。 这使您的应用程序容易受到 CEF 和 Chromium 中的漏洞的影响。 如果恶意软件获得了对 Chromium 内存的访问权,它也会获得对 .NET 内存的访问权。
DotNetBrowser 在单独的进程中启动 Chromium。 Chromium 漏洞保留在 Chromium 中。
Visual Studio Designer Visual Studio设计器
现代 WPF 和 Windows 窗体应用程序通常是在设计器的帮助下在 Visual Studio 中创建的。 这种方法总体上简化了 UI 创建并节省了大量时间和精力。
CefSharp 提供有限的设计器支持 。 如果应用程序本身以 x86 为目标,则其控件将在设计器中正确处理。 AnyCPU 可能会工作,但尚未经过彻底测试。
DotNetBrowser 控件是纯 UI 控件,它们在代码中显式初始化。 您可以在设计器中不受任何限制地使用它们。 安装 NuGet 包或 VSIX 扩展后,BrowserView 控件出现在工具箱中。 它可以像任何其他常规 UI 控件一样被拖到窗体或窗口上 。
嵌入应用程序 UI
CefSharp 提供 WPF 和 Windows 窗体支持。 但是,它的 WPF 实现只能在离屏渲染模式下工作 。 此实现具有有限的触摸屏和IME 支持。
DotNetBrowser 在两种渲染模式下同时支持 WPF 和 Windows 窗体。 在硬件加速模式下,触摸、手势和 IME 由 Chromium 自行处理,因此它们开箱即用。 在离屏模式下,存在一些已知的限制。
以下是将 CefSharp 嵌入 WPF 窗口的方法:
就是这样,在最简单的情况下,不再需要编写代码。 但是,在这种情况下,CefSharp 初始化和关闭是隐式执行的,很难确定它是否已经在某个点初始化。
将 DotNetBrowser 嵌入 WPF 窗口的过程需要额外的步骤。 例如:
MainWindow.xaml
public partial class MainWindow : Window
{
private const string Url = "https://www.baidu.com";
private readonly IBrowser browser;
private readonly IEngine engine;
public MainWindow()
{
// Create and initialize the IEngine instance.
EngineOptions engineOptions = new EngineOptions.Builder
{
RenderingMode = RenderingMode.HardwareAccelerated
}.Build();
engine = EngineFactory.Create(engineOptions);
// Create the IBrowser instance.
browser = engine.CreateBrowser();
InitializeComponent();
// Initialize the WPF BrowserView control.
browserView.InitializeFrom(browser);
browser.Navigation.LoadUrl(Url);
}
private void Window_Closed(object sender, EventArgs e)
{
browser?.Dispose();
engine?.Dispose();
}
}
MainWindow.xaml.cs
在这里,大部分代码都与 Chromium 实例和 IBrowser 实例的显式初始化和关闭有关。 UI 控件初始化是通过调用 InitializeFrom() 显式执行的。 这种方法可以更好地控制初始化和关闭过程,并且更容易自定义初始 Chromium 配置。
高DPI
在 CefSharp 中,浏览器子进程的默认 DPI 感知是 Per-Monitor。 因此,桌面应用程序应具备 DPI 感知功能,才能在高 DPI 显示器(DPI 比例设置大于 100% 的显示器)上正确运行。 在其他情况下,浏览器内容可能无法正确呈现,例如:
转存失败重新上传取消
DotNetBrowser 以不同的方式支持高 DPI。 在初始化过程中,它会检查当前进程的 DPI 感知,并为相应的 Chromium 引擎设置匹配的 DPI 感知。 因此,无需让您的应用程序显式识别 DPI 以避免在高 DPI 显示上呈现伪影。
转存失败重新上传取消
无头
DotNetBrowser 和 CefSharp 都可以在没有 UI 的应用程序中使用。
在 CefSharp 中,CefSharp.OffScreen.ChromiumWebBrowser 用于此目的。 初始化过程通常保持不变。 但是,如果您的代码使用 async/await 模式,则需要使用同步上下文来确保在主线程上而不是在不同的工作线程上执行初始化和关闭。
要在没有 UI 的应用程序中使用 DotNetBrowser,您需要像往常一样执行初始化。 在这种情况下,没有需要初始化的 BrowserView。 即使您的代码使用async/await模式,也无需创建和使用同步上下文。
API和功能
这两种产品都有许多可用的功能。 在本文中,我将比较几个最重要的,以展示 API 的不同之处。
DOM access DOM访问
在 CefSharp 中,您只能通过执行 JavaScript 调用来访问 DOM。 例如:
DotNetBrowser 提供了丰富的 DOM API,可用于直接从 .NET 执行以下操作:
例如,以下是如何在 DotNetBrowser 中的网页上执行相同的操作:
IDocument document = browser.MainFrame.Document;
(document.GetElementByName("question") as IInputElement).Value = "DotNetBrowser Example";
document.GetElementByName("btn").Click();
因此,在 DotNetBrowser 中与网页执行复杂的交互要方便得多。 无需编写难以调试和支持的复杂 JavaScript 代码。 DotNetBrowser 中的 DOM API 不是一组 JavaScript 调用的包装器。 它直接对 Blink 引擎进行 IPC 调用。
与JavaScript交互
执行JavaScript并处理结果
CefSharp 和 DotNetBrowser 都提供了在网页上执行 JavaScript 的能力。
在 CefSharp 中,有两种方法可用于此目的,ExecuteJavaScriptAsync 和 EvaluateScriptAsync。 两者都可用于浏览器本身(通过扩展方法)或其中的一个框架:
// Execute JavaScript without returning a result. The method returns
// before the script has actually been executed.
browser.ExecuteJavaScriptAsync("alert('All Resources Have Loaded');");
// Evaluate some Javascript code. The script will be executed asynchronously
// and the method returns a Task encapsulating the response from the
// JavaScript.
JavascriptResponse response = await browser.EvaluateScriptAsync(script);
然后使用 JavascriptResponse.Result 获取执行结果。
可能的结果类型有 bool, int, long, double, string, List, IDictionary, 和 IJavascriptCallback。 这里的集合是 JavaScript 集合的快照表示,而 IJavascriptCallback 是一种 JavaScript 函数表示,可用于从 .NET 端执行它。
在 DotNetBrowser 中,有 IFrame.ExecuteJavaScript() 用于此目的。 此方法的通用版本可用于显式指定预期的返回类型:
string title = await browser.MainFrame.ExecuteJavaScript("document.title");
IJsObject window = await browser.MainFrame.ExecuteJavaScript("window");
IElement body = await browser.MainFrame.ExecuteJavaScript("document.body");
这里的主要区别是可以将 JavaScript 对象表示为IJsObject。 使用此接口,您可以访问和修改 JavaScript 对象的属性并调用其方法。 在 .NET 端对 IJsObject 所做的所有更改都将立即反映在 JavaScript 端。 此外, ExecuteJavaScript 调用可以返回一个 IElement,这是一个 DOM 元素的表示,您可以使用它来访问和修改 DOM 属性或订阅 DOM 事件。
从JavaScript调用.NET
CefSharp 和 DotNetBrowser 都可以使网页上的 JavaScript 可以访问 .NET 对象,但是,CefSharp 存在一些特定的限制。
CefSharp JavaScript 绑定可用于 JavaScript 和 .NET 之间的通信。 但是,CefSharp 不允许将Form, Window 或任何Control注入 JavaScript。 另外,CefSharp 只支持调用注入对象的方法。 如果需要设置属性,则必须修改类并创建 Get/Set 方法。
在 DotNetBrowser 中,您可以将任何对象注入 JavaScript,包括 Form, Window 和 Control 对象。 执行注入后,您可以访问注入的 .NET 对象的公共字段、属性和方法。 此外,DotNetBrowser 支持从 JavaScript 访问索引属性(使用字符串或数字索引器)。 如果您需要从 JavaScript 访问 .NET 集合,这会很有帮助。
截屏
两种解决方案都支持在浏览器不可见时进行截屏。 但是,API 有明显不同。 以下是代码片段:
// Take a screenshot
var bitmapAsByteArray = await browser.CaptureScreenshotAsync();
// Save the screenshot as PNG
var screenshotPath = Path.GetFullPath("screenshot.png");
File.WriteAllBytes(screenshotPath, bitmapAsByteArray);
Taking a screenshot in CefSharp
// Take a screenshot
DotNetBrowser.Ui.Bitmap image = browser.TakeImage();
// Convert the screenshot to System.Drawing.Bitmap and save it as PNG
System.Drawing.Bitmap bitmap = image.ToBitmap();
bitmap.Save("screenshot.png", ImageFormat.Png);
Taking a screenshot in DotNetBrowser
主要的 DotNetBrowser DLL 不使用 System.Drawing 中的类型,因为它的限制,因此,它提供了自己的类型。然后可以通过 DotNetBrowser.Wpf 或 DotNetBrowser.WinForms 中提供的扩展方法将此类型转换为常规 System.Drawing.Bitmap。
Distribution and deployment 分发和部署
CefSharp 需要 Microsoft Visual C++ 运行时存在于环境中。 Visual C++ 2015 是最低版本,但所需的确切版本取决于 Chromium 版本。 因此,需要在您希望运行基于 CefSharp 的应用程序的每台机器上预安装 Microsoft Visual C++ Redistributable Package,将其设置为安装程序的依赖项,或将其 DLL 打包为应用程序的一部分,并确保 CefSharp 正确找到它们。
在 DotNetBrowser 中,所有必需的 Chromium 二进制文件和 DLL 都已打包到 DotNetBrowser DLL 中,并且可以在执行期间自动提取。 您无需预先安装 Microsoft Visual C++ Runtime 即可使用 DotNetBrowser。
支持和更新
CefSharp 是一个开源项目。 如果您发现错误或缺少功能,您可以提出建议。
DotNetBrowser是为使用.NET开发软件的商业公司设计和创建的商业产品,对集成第三方解决方案的质量和支持有很高的要求。 自 2015 年以来,TeamDev 开发并支持 DotNetBrowser。
我们所有已订阅有效Standard Support的客户都可免费使用所有DotNetBrowser 新版本并获得技术支持。 如果您发现错误或缺少功能,我们将应用修复程序,实施所需功能,并根据任务的复杂性在几天或几周内为您提供新版本的库。
几乎每个月都会发布一个新版本的 DotNetBrowser。 我们会在 Chromium 正式发布后的 3-4 周内将 Chromium 升级到最新的稳定版本(带有最新的安全补丁和修复的漏洞)。
概括
因为开源和免费,CefSharp 被广泛使用。 它很容易为基本案例进行配置,并且拥有广泛的文档和活跃的开源开发者社区。
但是,它具有来自其设计和架构的限制。 缺少沙盒支持使其安全性降低,并且进程内方法会影响稳定性并增加应用程序的内存使用量。
它也不能用于暗示在单独的 AppDomain(如 VSTO)中运行代码的环境。 对于其他一些情况,例如播放使用专有编解码器编码的内容,您必须自己构建、更新和维护 CEF。 这需要大量额外的工作和基础设施。
与加载的网页的复杂交互会通过 JavaScript 注入执行,这使得生成的代码更难调试和支持。
DotNetBrowser 简化了所有这些案例的开发过程——由于它的进程外架构,它可以用于创建更稳定和安全的解决方案。 使用 DotNetBrowser,您可以与需要在单独的 AppDomain 中运行代码的应用程序集成,并在网页上执行复杂的操作,而无需进行大量的 JavaScript 注入。
此外,如果您缺少该功能、发现问题或有疑问,您可以随时与我们联系并获得帮助。
你可能感兴趣的:(DotNetBrowser,TeamDev,.net,wpf,c#)
“深入浅出”系列之QT:(10)Qt接入Deepseek
我真不会起名字啊
qt 开发语言
项目配置:在.pro文件中添加网络模块:QT+=corenetworkAPI配置:将apiUrl替换为实际的DeepSeekAPI端点将apiKey替换为你的有效API密钥根据API文档调整请求参数(模型名称、温度值等)功能说明:使用QNetworkAccessManager处理HTTP请求自动处理JSON序列化/反序列化支持异步请求处理包含基本的错误处理扩展建议:添加更完善的错误处理(HTTP状
零基础学会asp.net做AI大模型网站/小程序十六:专栏总结
借雨醉东风
asp.net 小程序 后端
本专栏以实战为主,轻理论。如果哪里有不太懂的,可关注博主后加个人微信(平台规定文章中不能贴联系方式,需先关注博主,再加微信),后续一起交流学习。-------------------------------------正文----------------------------------------目录本专栏总结后续方向项目简介项目结构使用方法项目地址关键特点LLaMA机器学习简介使用LLaMA
新电脑配置安装下载
今天吃了嘛o
前端
1、谷歌浏览器地址https://www.google.cn/chrome/下载安装即可。2、nvm下载下载地址:地址https://nvm.uihtm.com/#google_vignettenvminstall相对应的node版本//安装nvmlist可以查看已下载的node版本//查看nvmuse相对应的node版本号//使用nvmuninstall对应版本号//卸载3、git下载官网地址h
基于Transformer的YOLOv8检测头架构改进:提升目标检测精度的全新突破(YOLOv8)
步入烟尘
transformer YOLO 目标检测
本专栏专为AI视觉领域的爱好者和从业者打造。涵盖分类、检测、分割、追踪等多项技术,带你从入门到精通!后续更有实战项目,助你轻松应对面试挑战!立即订阅,开启你的YOLOv8之旅!专栏订阅地址:https://blog.csdn.net/mrdeam/category_12804295.html文章目录基于Transformer的YOLOv8检测头架构改进:提升目标检测精度的全新突破什么是DAtten
Python爬虫TLS
dme.
Python爬虫零基础入门 爬虫 python
TLS指纹校验原理和绕过浏览器可以正常访问,但是用requests发送请求失败。后端是如何监测得呢?为什么浏览器可以返回结果,而requests模块不行呢?https://cn.investing.com/equities/amazon-com-inc-historical-data1.指纹校验案例1.1案例:ascii2dhttps://ascii2d.net/importrequestsres
docker部署kafka(单节点) + Springboot集成kafka
wsdhla
docker kafka spring boot zookeeper
环境:操作系统:win10Docker:DockerDesktop4.21.1(114176)、DockerEnginev24.0.2SpringBoot:2.7.15步骤1:创建网络:dockernetworkcreate--subnet=172.18.0.0/16net-kafka步骤2:安装zk镜像dockerpullzookeeper:latestdockerrun-d--restarta
ArcGIS二次开发之WPF中控件的使用
ShirmyMao
ArcGIS二次开发 wpf c# arcgis
WPF中ArcGIS控件的使用WPF中插入ArcGIS控件Winform控件上嵌套使用WPF控件WPF中插入ArcGIS控件在WPF中引用ArcGIS的控件需要使用WindowsFromsHost,具体用法如下:添加引用:WindowsFormsIntegration和system.windows.formWpf.xaml中后台代码中:publicAxMapControlMapControl=ne
数据挖掘十大经典算法详解(附原理解析与代码示例)
IT程序媛-桃子
华为认证 数据挖掘 算法 经验分享 华为
1.PageRank(链接分析)应用场景:搜索引擎排名、社交网络分析核心原理PageRank通过网页之间的链接关系计算网页的重要性,影响力大的网页排名更高。网页影响力=所有入链页面的加权影响力之和阻尼因子D(通常设为0.85)用于模拟用户随机访问网页的行为代码示例importnetworkxasnxG=nx.DiGraph()G.add_edges_from([("A","B"),("A","C"
UDP通信开发
Charary
udp 网络
开发流程:UDP本身不考虑链接,不存在客户和服务器的概念,UDP开发只有三步:创建UDP的套接字socket(AF_INET,SOCK_DGRAM,0)绑定自己的属性bindUDP随意的发送和接收数据sendto/recvfromUDP接口函数:sendto()函数功能:UDP专用的发送函数函数原型:ssize_tsendto(intsockfd,//套接字constvoid*buf,//待发送的
在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南
机 _ 长
YOLO系列模型有效涨点改进 深度学习落地实战 YOLO c++ 开发语言
在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(RockchipNeuralNetworkToolkit)框架部署YOLOv8Pose模型,并进行C++代码的编译和运行。注本文全
深度学习之目标检测的常用标注工具
铭瑾熙
人工智能 机器学习 深度学习 深度学习 目标检测 目标跟踪
1LabelImgLabelImg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用Python编写的,并使用Qt作为其图形界面,简单好用。注释以PASCALVOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持COCO数据集格式。2labelmelabelme是一款开源的图像/视频标注工具,标签可用于目标检测、分割和分类。灵感是来自于MIT开源的一款标注工具Label
Android. WebView出现net::ERR_UNKNOWN_URL_SCHEME错误
沙漠蓝色披头
小技巧 webview android
1.仔细观察图中url可以发现这是一个自定协议的url,究其原因,就是拦截webview中的url,如果url是自定义协议(如:tel,weixin,alipays等等)开头的,就url转换成原生调用(intent跳转),因为webview只能识别http,https这样的协议.webview其实就相当于pc端的浏览器,遇到http/https开头的url时会向host发起一个请求,而遇到自定义的
深入了解 CDN:概念、原理、过程、作用及工作场景
羊村懒哥
网络 网络 加速缓存
目录一、CDN的概念二、CDN的工作原理三、CDN的工作过程四、CDN的作用五、CDN可结合使用的技术六、CDN能够解决的网络问题七、CDN的工作场景在当今互联网飞速发展的时代,用户对于网页加载速度和内容获取的时效性要求越来越高。CDN(ContentDeliveryNetwork,⭐内容分发网络)应运而生,它在提升网络性能和用户体验方面发挥着关键作用。本文将详细介绍CDN的概念、工作原理、工作过
TCP 握手数据包分析
inquisiter
tcp/ip 网络 linux
一、客户端数据分析:spu@spu:~/code/pcap$tcpdump-rclient_all.pcap-Xreadingfromfileclient_all.pcap,link-typeEN10MB(Ethernet)17:58:56.346748IP192.168.1.178.55814>192.168.1.117.socks:Flags[S],seq2615205588,win64240
【Python系列】Python 解释器的站点配置
Kwan的解忧杂货铺@新空间代码工作室
s1 Python python 开发语言
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kwan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kafka,Spring,微服务,Netty等常用开发工具系列:罗列常用的开发工具,如IDEA,M
python读取zip包内文件_Python模块学习:zipfile zip文件操作
weixin_40001634
python读取zip包内文件
最近在写一个网络客户端下载程序,用于下载服务器上的数据。有些数据(如文本,office文档)如果直接传输的话,将会增加通信的数据量,使下载时间变长。服务器在传输这些数据之前先对其进行压缩,客户端接收到数据之后进行解压,这样可以减小网通传输数据的通信量,缩短下载的时间,从而增加客户体验。以前用C#做类似应用程序的时候,我会用SharpZipLib这个开源组件,现在用Python做类似的工作,只要使用
c#编程:基于C#+Access的学生信息管理系统 课程设计报告撰写提纲
gu20
C# c# 课程设计 开发语言 数据库开发
1.摘要简述系统目标、技术选型(C#+Access)、核心功能及数据库设计亮点。关键词:学生信息管理系统;数据库原理;C#;Access;事务处理。2.引言背景与意义:信息化管理需求、数据库技术在教育领域的应用价值。设计目标:实现学生信息的高效管理,体现数据库规范化、安全性等原理。技术路线:C#(WinForm)、Access数据库、ADO.NET数据访问技术。3.需求分析3.1功能需求:1.学生
动态蛇形卷积(DySnakeConv)在YOLOv8检测头中的应用与优化-分割性能的提升【YOLOv8】
步入烟尘
YOLO 动态蛇形卷积 DySnakeConv
本专栏专为AI视觉领域的爱好者和从业者打造。涵盖分类、检测、分割、追踪等多项技术,带你从入门到精通!后续更有实战项目,助你轻松应对面试挑战!立即订阅,开启你的YOLOv8之旅!专栏订阅地址:https://blog.csdn.net/mrdeam/category_12804295.html文章目录动态蛇形卷积(DySnakeConv)在YOLOv8检测头中的应用与优化-分割性能的提升【YOLOv
NETworkManager-v2025.1.18.0-开源网络管理与故障排除工具
私人珍藏库
windows 网络
NETworkManager链接:https://pan.xunlei.com/s/VOJWBmfe1dtEI9-_qNMdFKJAA1?pwd=z8xt#
SIP协议ALG实现逻辑【概览】(一)
看兵马俑的程序员
NAT+ALG 网络 网络协议
SIP(SessionInitiationProtocol)是一种用于控制多媒体通信会话的信令协议,广泛应用于VoIP(VoiceoverIP)、视频通话、即时消息等实时通信应用中。ALG(ApplicationLayerGateway,应用层网关)是通过理解应用层协议来调整网络流量的网络设备功能,尤其在NAT(NetworkAddressTranslation,网络地址转换)环境下的通信场景中,
C#多线程
陕西龙人
C#多线程 c#
目前C#多线程大部分大部分都是清一色的Task,这里就先主要讲一下Task本文主要讲解线程的启动,延迟执行,线程等待,线程的异常捕获及线程的取消1.线程的启动:主要有三种方式方式一Tasktask=newTask(()=>{System.Diagnostics.Debug.WriteLine($"Task开启了一个线程,TheadId:{Thread.CurrentThread.ManagedTh
PSINS工具箱函数介绍——ggnss(ggpsvars+gbdvars+gglovars)
MATLAB卡尔曼
PSINS函数 matlab PSINS
文章目录关于工具箱工具箱概述学习路径指南GNSS参数初始化函数`ggnss`函数功能参数体系结构典型应用场景系统参数初始化操作指南执行流程运行结果解析函数源码深度解析代码架构扩展开发建议关于工具箱kfinit是kf的参数初始化函数,用于初始化滤波参数本文所述的代码需要基于PSINS工具箱,工具箱的讲解:PSINS初学指导:https://blog.csdn.net/callmeup/article
【k8s应用管理】kubernetes HPA+rancher
Karoku066
kubernetes rancher 容器 运维 云原生
文章目录KubernetesHPA部署指南概述部署metrics-server部署HPARancher管理Kubernetes集群指南实验环境安装及配置RancherKubernetesHPA部署指南概述KubernetesHPA(HorizontalPodAutoscaling)可以根据Pod的CPU利用率自动调整Deployment、ReplicationController或ReplicaS
Android Gradle使用总结
Wei_Leng
Android studio android gradle 脚本
其他Groovy入门学习http://blog.csdn.net/zhaoyanjun6/article/details/70313790AndroidGradleAndroid项目使用Gradle作为构建框架,Gradle又是以Groovy为脚本语言。所以学习Gradle之前需要先熟悉Groovy脚本语言。Groovy是基于Java语言的脚本语言,所以它的语法和Java非常相似,但是具有比jav
XML的介绍及使用DOM,DOM4J解析xml文件
late summer182
xml java
1XML简介XML(可扩展标记语言,ExtensibleMarkupLanguage)是一种用于定义文档结构和数据存储的标记语言。它主要用于在不同的系统之间传输和存储数据。作用:数据交互配置应用程序和网站Ajax基石特点XML与操作系统、编程语言的开发平台无关实现不同系统之间的数据交换2XML文档结构王珊.NET高级编程包含C#框架和网络编程等李明明XML基础编程包含XML基础概念和基本作用2.1
前端504错误分析
ox0080
# 北漂+滴滴出行 Web VIP 激励 前端
前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案:1.确认错误来源504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端→代理服务器→后端服务,问题通常出在代理与后端之间。2.排查步骤(1)检查后端服务状态确认服务是否运行:通过日志或监控工具(如systemctlstatus,KubernetesPod
handpose_X 之 onnx runtime C++(手部关键点检测)
Xian-HHappy
手部关键点检测 ONNX ONNXRuntime C++推理 模型转换
handpose_X之onnxruntime相关项目地址:1、手部关键点检测项目地址:https://gitcode.net/EricLee/handpose_x该项目中通过脚本model2onnx.py,将.pth模型转为.onnx模型。示例视频:开源项目-手势识别手势检测手部21关键点检测2、手部关键点检测onnx模型,onnxruntimeC++模型推理。项目地址:https://gitco
python调用接口返回401,带有Python的Jira API在有效凭据上返回错误401
weixin_39743369
python调用接口返回401
IamtryingtousetheJirapythonlibrarytodosomequitebasicthings.Evenbeforedoinganything,theconstructorfails.address='https://myaddress.atlassian.net'options={'server':address}un='my@user.com'#un='my'#alsod
C/C++编译原理
weixin_33809981
转自:http://m.blog.csdn.net/blog/business122/21722039http://m.blog.csdn.net/blog/business122/21722151C/C++编译就是要将C/C++的代码映射到相应的机器码,以及讨论其中的内存管理模式,包括内存的分配,如何使用等等,整型、数组、指针等这些在内存中的实现机制。C/C++的编译包括几个部分,分别是编译,汇
记录自己的日常总结与错误
快乐呆橘
mysql github visual studio java android
//1.解决VMware的方法:管理员身份运行cmd->输入netshwinsockreset->重启电脑同时也是windows修复网络问题的一种方法//2.解决spring中tx报错问题:在设置xmlcatalog时要把key改成http://www.springframework.org/schema/tx/spring-tx.xsd//3.解决jsp链接数据库中文乱码问题:首先在mysql端
jdk tomcat 环境变量配置
Array_06
java jdk tomcat
Win7 下如何配置java环境变量
1。准备jdk包,win7系统,tomcat安装包(均上网下载即可)
2。进行对jdk的安装,尽量为默认路径(但要记住啊!!以防以后配置用。。。)
3。分别配置高级环境变量。
电脑-->右击属性-->高级环境变量-->环境变量。
分别配置 :
path
&nbs
Spring调SDK包报java.lang.NoSuchFieldError错误
bijian1013
java spring
在工作中调另一个系统的SDK包,出现如下java.lang.NoSuchFieldError错误。
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.l
LeetCode[位运算] - #136 数组中的单一数
Cwind
java 题解 位运算 LeetCode Algorithm
原题链接:#136 Single Number
要求:
给定一个整型数组,其中除了一个元素之外,每个元素都出现两次。找出这个元素
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间
难度:中等
分析:
题目限定了线性的时间复杂度,同时不使用额外的空间,即要求只遍历数组一遍得出结果。由于异或运算 n XOR n = 0, n XOR 0 = n,故将数组中的每个元素进
qq登陆界面开发
15700786134
qq
今天我们来开发一个qq登陆界面,首先写一个界面程序,一个界面首先是一个Frame对象,即是一个窗体。然后在这个窗体上放置其他组件。代码如下:
public class First { public void initul(){ jf=ne
Linux的程序包管理器RPM
被触发
linux
在早期我们使用源代码的方式来安装软件时,都需要先把源程序代码编译成可执行的二进制安装程序,然后进行安装。这就意味着每次安装软件都需要经过预处理-->编译-->汇编-->链接-->生成安装文件--> 安装,这个复杂而艰辛的过程。为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,我们只需要根据自己的
socket通信遇到EOFException
肆无忌惮_
EOFException
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:
基于spring的web项目定时操作
知了ing
java Web
废话不多说,直接上代码,很简单 配置一下项目启动就行
1,web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="h
树形结构的数据库表Schema设计
矮蛋蛋
schema
原文地址:
http://blog.csdn.net/MONKEY_D_MENG/article/details/6647488
程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,
maven将jar包和源码一起打包到本地仓库
alleni123
maven
http://stackoverflow.com/questions/4031987/how-to-upload-sources-to-local-maven-repository
<project>
...
<build>
<plugins>
<plugin>
<groupI
java IO操作 与 File 获取文件或文件夹的大小,可读,等属性!!!
百合不是茶
类 File
File是指文件和目录路径名的抽象表示形式。
1,何为文件:
标准文件(txt doc mp3...)
目录文件(文件夹)
虚拟内存文件
2,File类中有可以创建文件的 createNewFile()方法,在创建新文件的时候需要try{} catch(){}因为可能会抛出异常;也有可以判断文件是否是一个标准文件的方法isFile();这些防抖都
Spring注入有继承关系的类(2)
bijian1013
java spring
被注入类的父类有相应的属性,Spring可以直接注入相应的属性,如下所例:1.AClass类
package com.bijian.spring.test4;
public class AClass {
private String a;
private String b;
public String getA() {
retu
30岁转型期你能否成为成功人士
bijian1013
成长 励志
很多人由于年轻时走了弯路,到了30岁一事无成,这样的例子大有人在。但同样也有一些人,整个职业生涯都发展得很优秀,到了30岁已经成为职场的精英阶层。由于做猎头的原因,我们接触很多30岁左右的经理人,发现他们在职业发展道路上往往有很多致命的问题。在30岁之前,他们的职业生涯表现很优秀,但从30岁到40岁这一段,很多人
【Velocity四】Velocity与Java互操作
bit1129
velocity
Velocity出现的目的用于简化基于MVC的web应用开发,用于替代JSP标签技术,那么Velocity如何访问Java代码.本篇继续以Velocity三http://bit1129.iteye.com/blog/2106142中的例子为基础,
POJO
package com.tom.servlets;
public
【Hive十一】Hive数据倾斜优化
bit1129
hive
什么是Hive数据倾斜问题
操作:join,group by,count distinct
现象:任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成;查看未完成的子任务,可以看到本地读写数据量积累非常大,通常超过10GB可以认定为发生数据倾斜。
原因:key分布不均匀
倾斜度衡量:平均记录数超过50w且
在nginx中集成lua脚本:添加自定义Http头,封IP等
ronin47
nginx lua csrf
Lua是一个可以嵌入到Nginx配置文件中的动态脚本语言,从而可以在Nginx请求处理的任何阶段执行各种Lua代码。刚开始我们只是用Lua 把请求路由到后端服务器,但是它对我们架构的作用超出了我们的预期。下面就讲讲我们所做的工作。 强制搜索引擎只索引mixlr.com
Google把子域名当作完全独立的网站,我们不希望爬虫抓取子域名的页面,降低我们的Page rank。
location /{
java-3.求子数组的最大和
bylijinnan
java
package beautyOfCoding;
public class MaxSubArraySum {
/**
* 3.求子数组的最大和
题目描述:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4,
Netty源码学习-FileRegion
bylijinnan
java netty
今天看org.jboss.netty.example.http.file.HttpStaticFileServerHandler.java
可以直接往channel里面写入一个FileRegion对象,而不需要相应的encoder:
//pipeline(没有诸如“FileRegionEncoder”的handler):
public ChannelPipeline ge
使用ZeroClipboard解决跨浏览器复制到剪贴板的问题
cngolon
跨浏览器 复制到粘贴板 Zero Clipboard
Zero Clipboard的实现原理
Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板。
Zero Clipboard的安装方法
首先需要下载 Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js
单例模式
cuishikuan
单例模式
第一种(懒汉,线程不安全):
public class Singleton { 2 private static Singleton instance; 3 pri
spring+websocket的使用
dalan_123
一、spring配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.or
细节问题:ZEROFILL的用法范围。
dcj3sjt126com
mysql
1、zerofill把月份中的一位数字比如1,2,3等加前导0
mysql> CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, -> day
Android开发10——Activity的跳转与传值
dcj3sjt126com
Android开发
Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据。
一、Activity跳转
方法一Intent intent = new Intent(A.this, B.class); startActivity(intent)
方法二Intent intent = new Intent();intent.setCla
jdbc 得到表结构、主键
eksliang
jdbc 得到表结构、主键
转自博客:http://blog.csdn.net/ocean1010/article/details/7266042
假设有个con DatabaseMetaData dbmd = con.getMetaData(); rs = dbmd.getColumns(con.getCatalog(), schema, tableName, null); rs.getSt
Android 应用程序开关GPS
gqdy365
android
要在应用程序中操作GPS开关需要权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
但在配置文件中添加此权限之后会报错,无法再eclipse里面正常编译,怎么办?
1、方法一:将项目放到Android源码中编译;
2、方法二:网上有人说cl
Windows上调试MapReduce
zhiquanliu
mapreduce
1.下载hadoop2x-eclipse-plugin https://github.com/winghc/hadoop2x-eclipse-plugin.git 把 hadoop2.6.0-eclipse-plugin.jar 放到eclipse plugin 目录中。 2.下载 hadoop2.6_x64_.zip http://dl.iteye.com/topics/download/d2b
如何看待一些知名博客推广软文的行为?
justjavac
博客
本文来自我在知乎上的一个回答:http://www.zhihu.com/question/23431810/answer/24588621
互联网上的两种典型心态:
当初求种像条狗,如今撸完嫌人丑
当初搜贴像条犬,如今读完嫌人软
你为啥感觉不舒服呢?
难道非得要作者把自己的劳动成果免费给你用,你才舒服?
就如同 Google 关闭了 Gooled Reader,那是
sql优化总结
macroli
sql
为了是自己对sql优化有更好的原则性,在这里做一下总结,个人原则如有不对请多多指教。谢谢!
要知道一个简单的sql语句执行效率,就要有查看方式,一遍更好的进行优化。
一、简单的统计语句执行时间
declare @d datetime ---定义一个datetime的变量set @d=getdate() ---获取查询语句开始前的时间select user_id
Linux Oracle中常遇到的一些问题及命令总结
超声波
oracle linux
1.linux更改主机名
(1)#hostname oracledb 临时修改主机名
(2) vi /etc/sysconfig/network 修改hostname
(3) vi /etc/hosts 修改IP对应的主机名
2.linux重启oracle实例及监听的各种方法
(注意操作的顺序应该是先监听,后数据库实例)
&nbs
hive函数大全及使用示例
superlxw1234
hadoop hive函数
具体说明及示例参 见附件文档。
文档目录:
目录
一、关系运算: 4
1. 等值比较: = 4
2. 不等值比较: <> 4
3. 小于比较: < 4
4. 小于等于比较: <= 4
5. 大于比较: > 5
6. 大于等于比较: >= 5
7. 空值判断: IS NULL 5
Spring 4.2新特性-使用@Order调整配置类加载顺序
wiselyman
spring 4
4.1 @Order
Spring 4.2 利用@Order控制配置类的加载顺序
4.2 演示
两个演示bean
package com.wisely.spring4_2.order;
public class Demo1Service {
}
package com.wisely.spring4_2.order;
public class