草庐IT

unity-内存GC

全部标签

c# - 带有其他参数的Unity构造函数注入(inject)

我有一个类,其构造函数如下所示:publicBatchService(IRepositoryrepository,ILoggerlogger,stringuser)在我的DIBootstrap类中,我有以下RegisterType命令:.RegisterType(newInjectionConstructor(newResolvedParameter("SomeRepository"),newResolvedParameter("DatabaseLogger")))在我的客户端代码中,我想实例化BatchService如下:BatchServicebatchService=DICont

c# - 此处是否需要 GC.KeepAlive,或者我可以依靠局部变量和参数来保持对象的事件状态吗?

我有很多方法采用WPF的WriteableBitmap并使用不安全的代码直接从其BackBuffer中读取。每当我做这样的事情时,我是否应该使用GC.KeepAlive并不完全清楚:intMyMethod(WriteableBitmapbmp){returnDoUnsafeWork(bmp.BackBuffer);}一方面,在MyMethod的堆栈上仍然有对bmp的引用。另一方面,它似乎依赖于实现细节-这可能会编译为尾调用,例如,在输入DoUnsafeWork时不保留对bmp的引用。类似地,想象以下假设代码:intMyMethod(){WriteableBitmapbmp1=getAB

c# - GCHandle.Alloc 是否分配内存?

我正在使用SciTech的.NETMemoryProfiler来降低程序的内存分配率和垃圾回收频率。令人惊讶的是,根据探查器,最大数量的分配似乎来自GCHandle.Alloc调用,我正在执行这些调用以将现有的.NET数组编码到nativeOpenGL。我的理解是调用GCHandle.Alloc不会分配内存,它只会将现有内存固定在托管堆上?是我错了还是分析器错了? 最佳答案 .NETreferencesource任何人都可以看到,您可以自己看看并找出答案。如果深入研究GCHandle.Alloc,您会看到它调用了一个名为Intern

c# - Prism,将 Views 和 ViewModels 与 Unity 连接起来,试图理解它

CreatingtheViewandViewModelUsingUnityUsingUnityasyourdependencyinjectioncontainerissimilartousingMEF,andbothproperty-basedandconstructor-basedinjectionaresupported.Theprincipaldifferenceisthatthetypesaretypicallynotimplicitlydiscoveredatruntime;instead,theyhavetoberegisteredwiththecontainer.Typi

c# - Unity 4.3 - 2D,如何以编程方式将 Sprite 分配给对象

我正在尝试创建一个负责创建和显示不同Sprite的对象,因此我想以编程方式直接访问Assets/Sprite,而不是将Sprite拖放到该对象下的层次结构中。有一种方法可以通过编程方式创建一个新的Sprite并分配我在Assets文件夹中的内容吗?我还想要一种数据结构,在游戏开始时加载一些图像,一个数组或字典或类似的东西,这样我就可以根据某些情况更改我需要显示的图像。但是让我感到困惑的是,因为我是Unity的新手,所以如何使用Assets文件夹以编程方式引用Sprite来创建Sprite。随进度编辑:我创建了一个像这样的Sprite数组:publicSprite[]mySprites;

在 Unity 中创建简单、可靠且干净的 UI

无论您在Unity中构建的应用程序类型如何,您都很有可能会使用一些用户界面(或简称为UI)。然而,尽管这项任务很简单,但为您的UI组件保持一个干净可靠的系统并非易事。事实上,一些错误的步骤会迅速破坏未来的变化,并导致数小时的过度工作和修订。为了避免您将所有精力花在构建不当的UI上,本文将介绍主要步骤,了解Unity提供的UI元素,然后是一个简单的工作流程来开发您的界面结构,最后是如何使用免费资源和其他Unity工具来增强其视觉元素。设置环境用户界面画布画布渲染模式画布缩放器UI面板、图像、按钮和文本用户界面图像用户界面文本用户界面按钮用户界面面板其他UI元素矩形变换和锚点锚预设基本菜单结构用于

c# - 尝试使用 ODP.NET 在 Oracle 11g 中读取或写入 protected 内存

我正在开发一个应该长时间运行并通过ODP.NET广泛使用Oracle(11g)数据库的应用程序。不过,偶尔(每2或3天)ODP.NET会抛出System.AccessViolationException,然后需要重新启动应用程序。这是我的堆栈跟踪:Unhandledexception:System.Reflection.TargetInvocationException:Exceptionhasbeenthrownbythetargetofaninvocation.--->System.AccessViolationException:Attemptedtoreadorwritepro

c# - 我可以通过在 C# 中通过引用传递 DateTime 参数来减少内存分配吗?

在C#中,与按值传递相比,将DateTime引用作为参数传递给函数时,内存分配是否有显着减少?intGetDayNumber(refDateTimedate)对比intGetDayNumber(DateTimedate)函数内的代码在任何情况下都不会修改日期。 最佳答案 DateTime是一个8字节的结构。ref有4或8个字节,具体取决于您的目标架构。所以最多只能节省4个字节的堆栈内存,这是完全不相关的。甚至有可能ref阻止了一些优化,例如将DateTime放在寄存器中,从而实际上增加了内存使用。这是一个明显的过早优化案例。不要这样

c# - 如何使用 Ioc Unity 注入(inject)依赖属性

我有以下类(class):publicinterfaceIServiceA{stringMethodA1();}publicinterfaceIServiceB{stringMethodB1();}publicclassServiceA:IServiceA{publicIServiceBserviceB;publicstringMethodA1(){return"MethodA1()"+serviceB.MethodB1();}}publicclassServiceB:IServiceB{publicstringMethodB1(){return"MethodB1()";}}我将Uni

c# - Unity3D。试图在未经授权的情况下为对象发送命令

我有一个多人回合制策略游戏,需要一个游戏管理器来控制当前游戏状态(轮到谁了等等)。这个管理器应该对每个客户端都是通用的,它的状态应该在服务器上同步。我是这样操作的:游戏管理器对象是NetworkBehaviour,它具有NetworkIdentity,它既不是本地玩家权限也不是服务器权限。我制作了一个自定义NetworkManager,它在客户端连接时生成游戏管理器,同时测试它是否是服务器。这是一个代码:publicoverridevoidOnClientConnect(NetworkConnectionconn){ClientScene.Ready(conn);if(NetworkS