草庐IT

unity-内存GC

全部标签

c# - 为什么这个内存管理技巧有效?

引用thisUnitydocumentation并转到部分Largeheapwithslowbutinfrequentgarbagecollectionvartmp=newSystem.Object[1024];//makeallocationsinsmallerblockstoavoidthemtobetreatedinaspecialway,whichisdesignedforlargeblocksfor(inti=0;i诀窍是在程序启动时预先分配一些内存块。为什么这个技巧有效?当block被预分配时,它们是否以某种方式“注册”(或“绑定(bind)”)到应用程序,因此即使tmp在

c# - 在多个窗口中使用 WPF WebBrowser 控件时发生内存泄漏

我正在开发一个使用WPFWebBrowser控件(System.Windows.Controls.WebBrowser)的项目。该程序的Web浏览器元素是用户可以参与的众多事件之一,并在单独的窗口中打开。用户离开浏览器后,窗口关闭,每次用户返回浏览器时都会创建一个新窗口。我们注意到在持续使用浏览器时,我们的程序出现了显着的内存泄漏/性能下降(使用量从最初的~200mb上升到~700mb)。在我们自己的代码中未能找到任何资源泄漏点之后,我决定确定问题是出在我们自己的WebBrowser包装器控件上,还是出在WPF控件上。我创建了一个新的简单项目,其中仅包含一个MainWindow和一个W

c# - 第三方库中麻烦的 GC.collect() 调用

在分析我的应用程序(C#、.NET4)时,我注意到我正在使用的第三方库显式调用了GC.Collect()。这非常烦人,因为它有时会对我的应用程序性能产生巨大影响,因为对该库的一些调用最终会陷入巨大的循环:花在GC.Collect上的时间占总执行时间的80%以上。当然,我向库维护者报告了这种行为(库不是开源的),但是当他们正在开发新版本时,我想优化我的应用程序。我能做什么?我尝试通过将GCSettings.LatencyMode设置为GCLatencyMode.LowLatency来配置GC(当然,仅在执行库调用期间),但无济于事。我宁愿避免fork我的过程。有什么想法吗?

c# - 为什么在循环中使用 StreamSocket 会导致内存泄漏?

我正在开发一个C#、UWP10解决方案,它使用快速、连续的读/写循环与网络设备通信。API提供的StreamSocket似乎工作得很好,直到我意识到存在内存泄漏:累积了Task。在堆中,每分钟数百个。我是否使用普通的旧while(true)在asyncTask中循环,或使用self发布ActionBlock使用TPL数据流(根据thisanswer),结果是相同的。如果我消除从套接字读取并专注于写入,我能够进一步隔离问题:我是否使用DataWriter.StoreAsync方法或更直接的StreamSocket.OutputStream.WriteAsync(IBufferbuffer

c# - GC generation 3 出现在 windbg 中

我有一个正在运行的进程的转储文件(试图查找内存泄漏)我注意到的一件事是,当我通过!do转储更大的对象时,windbg告诉我它们是第3代GC??所有这些都是字节数组,所以当我查看转储中的所有字节数组时,我可以看到第0、1、2和3代GC。谁能解释一下这里发生了什么,因为我认为只有3代GC。>0:000>!do0x0000000011b47450Name:System.Byte[]MethodTable:000007fef7d2e798EEClass:000007fef7932670Size:131096(0x20018)bytesGCGeneration:3Array:Rank1,Numb

c# - 为什么 GC 在 LINQ 查询后释放 WhereListIterator 而不是表示条件的函数?

我正在查看一个简单的LINQ查询对内存的影响,并注意到LINQ查询创建了2个类型为Enumerable+WhereListIterator的额外对象。和Func.使用的代码是这样的:staticvoidMain(string[]args){//Settingbaselinesnapshotvarlist1=newList{4862,6541,7841};varlist2=newList(list1.Count);varlist3=newList(list1.Count);//Firstsnapshot:LINQusagelist2.AddRange(list1.Where(item=>

按下键时的 C# 和 Unity3D

我是C#的新手。我正在Unity中创建一些东西来帮助我更好地学习C#和Unity。我想知道为什么:Input.GetKeyDown(KeyCode.UpArrow))仅在放置在以下位置时触发一次:voidUpdate()既然更新是一个循环,为什么当我按住键时它没有被触发(在我的例子中导致球体移动)?我已经设法通过使用两个bool来让它工作,这两个bool在按下和释放键时会发生变化。这是我用来移动球体并模拟加速/减速的完整脚本:usingUnityEngine;usingSystem.Collections;publicclasssphereDriver:MonoBehaviour{in

Unity3D 脚本3(旋转)

一、物体的旋转给物体调转一个旋转角度。1、Quaternion四元组(x,y,z,w)transfrom.rotation()=...不方便操作,官方不建议用2、EulerAngle欧拉角transfrom.eulerAngles=newVector(0,45,0);transfrom.LocalEulerAngles=newVector(0,45,0);voidStart(){transfrom.localEulerAngles=newVector(0,45,0);}这样就可以让物体旋转45度。在Update中修改角度持续旋转Vector3angles=transfrom.localEule

c# - SevenZipSharp - 压缩内存流

我正在使用SevenZipSharp将文件压缩成zip文件。有没有办法使用它从内存流创建zip(意思是,先将文件加载到内存流中)?谢谢,玛雅人。 最佳答案 我将SevenZipSharp与流一起使用,没有任何问题。SevenZip.SevenZipCompressorcompressor=newSevenZip.SevenZipCompressor();compressor.CompressionMethod=SevenZip.CompressionMethod.Lzma2;compressor.CompressionLevel=S

c# - 将 ionic Zip 读取为内存流 C#

我正在使用Ionic.Zip通过这种方法将ZipFile提取到内存流:privateMemoryStreamGetReplayZipMemoryStream(){MemoryStreamzipMs=newMemoryStream();using(ZipFilezip=ZipFile.Read(myFile.zip)){foreach(ZipEntryzipEntryinzip){if(zipEntry.FileName.StartsWith("Aligning")||zipEntry.FileName.StartsWith("Sensing")){zipEntry.Extract(zi