首页 > 其他分享 >【Unity】关于IDisposable / 托管资源和非托管资源

【Unity】关于IDisposable / 托管资源和非托管资源

时间:2024-07-09 10:08:32浏览次数:12  
标签:IDisposable managed 句柄 托管 Unity 内存 分配 资源

背景

最近在做后台快捷键的功能,当应用不被聚焦时,也需要响应快捷键的输入。于是就用到了Win32 API里的系统钩子,系统钩子会用到IntPtr去记录hookID,这些资源都是非托管资源,绕过了C#的内存管理系统。在网上搜索了腾讯云社区里关于GlobalKeyBoardHook的文章[1]

作用

IDisposable是一个接口,用于在使用完资源后进行释放和清理。它定义了一个Dispose()方法,该方法用于释放由对象持有的非托管资源,如文件句柄、数据库连接、网络连接等。

托管资源/非托管资源区分

托管资源(Managed resources)

托管资源是由托管代码(managed code)创建和管理的资源。它们是由编程语言和运行时环境(.net CLR 的GC 机制)自动进行内存管理和垃圾回收的,无需显式释放的资源。托管资源包括但不限于以下内容:

  • 托管对象(managed objects):由编程语言创建的对象,如类的实例、数组等。
  • 托管堆上的内存(managed heap memory):由运行时环境分配和管理的内存。
  • 托管文件句柄(managed file handles):由运行时环境分配和管理的文件句柄。

非托管资源(Unmanaged resources)

非托管资源是由非托管代码(unmanaged code)创建和管理的资源。它们不受编程语言和运行时环境的自动内存管理和垃圾回收机制控制,需要手动释放和清理。非托管资源包括但不限于以下内容:

  • 非托管对象(unmanaged objects):由使用非托管语言(如C++)创建的对象。
  • 非托管内存(unmanaged memory):由使用非托管语言分配的内存,如通过调用C的malloc函数分配的内存。
  • 文件句柄(file handles):由操作系统分配的文件句柄,如打开的文件、数据库连接等。
  • 网络连接(network connections):由操作系统分配的网络连接资源。
  • Win32 API:Win32 API是一组用于访问Windows操作系统的函数和数据结构。这些函数和数据结构是以非托管的C/C++语言编写的,可以使用DllImport属性在C#中访问它们。

参考

[1] https://cloud.tencent.com/developer/information/C%23应用程序中的全局键盘捕获-article

标签:IDisposable,managed,句柄,托管,Unity,内存,分配,资源
From: https://www.cnblogs.com/JimmyZou/p/18291192

相关文章

  • 零基础 用unity做一款FPS射击游戏-制作游戏场景(3)
    制作游戏场景需要各种的资源例如颜色图片模型动画所以我们首先要了解如何去找到资源下载到本地Unity资源商店-优质3D2D游戏制作资源平台 进入这个网站选择3D你就可以找到你所需要的各种资源了随便点击一个免费的模型  添加到我的资源然后回到我们的项目中......
  • 一个开源的、独立的、可自托管的评论系统,专为现代Web平台设计
    大家好,今天给大家分享的是一个开源的、独立的、可自托管的评论系统,专为现代Web平台设计。Remark42是一个自托管的、轻量级的、简单的(但功能强大的)评论引擎,它不会监视用户。它可以嵌入到博客、文章或任何其他读者添加评论的地方。项目介绍Remark42提供多种登录选项,包括通过G......
  • Unity读取xml文件
    在XML中配置字典名称,字典的key和value,目前key和value都是用的string类型,通过ParseXml类的ParseData函数,传递字典名称和key来获取valuexml文件内容解析数据类usingUnityEngine;usingSystem.Xml;usingSystem;///<summary>///读取xml信息类///</summary>publicclas......
  • Unity入门之重要组件和API(3) : Transform
    前言Transform类主要处理游戏对象(GameObject)的位移、旋转、缩放、父子关系和坐标转换。1.位置和位移1.1必备知识点:Vector3Vector3主要用来表示三维坐标系中的一个点或者一个向量。【声明】Vector3v1=newVector3();Vector3v2=newVector3(10,10);Vector3v3......
  • Android 集成 Unity上的坑
    转载自CSDN1.Unity版本的差异Unity的版本在2019及其以下选择Mono方式打包出Android项目,反之选择IL2CPP方式打包Android项目为什么我会说这个Unity版本上会存在差异呢?因为我在工作时发现,我们项目原本是要升级到2022最新版的,但是发现2022用Mono方式打包出来的Android项目运行到An......
  • unity编辑器拓展,查找项目中预制体引用的组件或者脚本
    `usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEditor;usingUnityEngine.UI;usingSystem.Reflection;usingSystem;publicclassSearchComponent:EditorWindow{privatestringcomponentName="UnityEngine.......
  • Unity编辑器扩展之Inspector面板扩展
    内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity编辑器扩展之Inspector面板扩展   TechX坚持将创新的科技带给世界!拥有更好的学习体验——不断努力,不断进步,不断探索TechX——心探索、心进取!助力快速掌握Inspector编辑器扩展为......
  • Unity Shader技巧:实现带投影机效果,有效避免边缘拉伸问题
    这个是原始的projector投影组件,边缘会有拉伸经过修改shader后边缘就没有拉伸了(实现代码在文章最后)这个着色器通过检查每个像素的UV坐标是否在定义的边界内,来确定是否应用黑色边框。如果UV坐标处于边缘区域,那么像素颜色会被强制设为黑色,从而在投影图像周围形成一个黑色......
  • 八叉树-Unity
    八叉树八叉树简介八叉树(Octree)是一种在三维空间中进行数据组织和存储的树型数据结构。它的工作原理是将一个大的三维空间递归地分割成八个相等的小空间,每个小空间又可以继续分割成八个更小的空间,以此类推,直到达到某个预定的深度或者满足特定的终止条件(例如,空间内元素数量少于一......
  • 【Unity几种数据存储之间的区别】PlayerPrefs、Json、XML、二进制、SQLite数据存储之
    ......