Tag: 内存管理

字节数组“联合”覆盖在c#StructLayout.Explicit中

我希望在ac#struct类型中有一种c风格的uion。 出于某种原因,每次我分配一个我定义的类型时,我都会得到一个exception。 这是我自己的类型。 基本的想法是我可以访问这个结构的“指针”。 不幸的是我得到了一个Exception TypeLoadException: 附加信息:无法从程序集“ManagedTarget,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“ManagedTarget.FngPeriodeParameterType”,因为它包含偏移0处的对象字段,该字段未正确对齐或重叠对象字段。 怎么了? [StructLayout(LayoutKind.Explicit, Size = 16)] unsafe internal struct FngPeriodeParameterType { [FieldOffset(0)] public Byte[] ByteArray; [FieldOffset(0)] public UInt32 Repetitions; [FieldOffset(4)] public Int16 Amplitude; [FieldOffset(6)] public Int16 Offset; [FieldOffset(8)] public Int16 Gain; [FieldOffset(10)] public UInt16 Selection; [FieldOffset(12)] public UInt32 Step; }

高效处理超宽但不高的位图?

有没有办法创建更多空间/资源有效的位图? 目前我尝试渲染一个文件,大约800px高,但大约720000px宽。 它崩溃了我的应用程序,大概是因为位图的共享内存大小。 我可以更有效地执行此操作,例如直接将其创建为gif,而不是稍后保存它吗? 我尝试从现实世界的阅读中保存一系列线条/矩形,我希望它是每1/100秒1px。

在Listbox中处理WPF中的图像(内存泄漏)

我有一个ListBox,里面有一堆图像(通过datatemplate完成)。 通过设置项目来源创建图像: 然后使用列表框的Items.Clear()方法清除它们。 使用列表框的Items.Add方法添加新图像。 但是,内存使用量开始上升和上升。 它显示的是相同的300个左右的小图像,但内存似乎永远不会被释放。 该应用程序开始使用大约40Megs,并迅速攀升至700Megs。 如何释放所有这些图像正在使用的内存? 编辑 :有一件事我忘了提到,图像(大小各约4-5k)正在通过网络加载。 缓存是否以某种方式对此负责? 显示12个图像会咀嚼大约10兆内存,大约是100X文件大小。

Windows Phone 8:监视混合C#/ C ++中的内存使用情况

我想监视使用Windows Phone运行时组件的Windows Phone 8上混合C#/ C ++应用程序的内存使用情况。 问题是,当在Visual Studio(ALT + F1)中打开分析工具包时,我只有“执行”选项(http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202934%28v= vs.105%29.aspx)。 对于“纯”C#项目,也可以使用内存选项。 是否有其他或多或少的简单方法来监控内存使用情况? 问候,

我如何明确清除字节

我正在创建新的字节数组,这些数组不是由GC收集的,而是存在于内存中并增加了专用字节。 下面的代码每10秒执行一次。 完成后如何明确清除变量? byte[] outputMessage = new byte[10000]; //Do some work here

Linq记忆问题

因为我对linq很新,所以我想在下面的例子中询问我的理解是否正确。 让我们假设我有非常大的动物名称集(100k记录),我想提交它们并以非常耗时的方法(2周)处理过滤的项目。 RunWithLinq()和RunWithoutLinq()方法完全相同。 这是真的,使用第一种方法,原始(大)集合将在离开方法后留在内存中,并且不会被GC触及,而使用无linq方法时, GC将删除该集合? 我会感激一点解释。 class AnimalProcessor { private IEnumerable animalsToProcess; internal AnimalProcessor(IEnumerable animalsToProcess) { this.animalsToProcess = animalsToProcess; } internal void Start() { //do sth for 2 weeks with the collection } } class Program { static void RunWithLinq() { var animals = new string[] { “cow”, “rabbit”, “newt”, “ram” }; var filtered = […]

Console.WriteLine()的高内存使用率

public static void Main() { int size = 250000; var a = new int[size]; for (int i = 0; i < size; i++) Console.WriteLine("{0}", a[i]); } 当我用CLRProfiler测试上面的代码时,它告诉我代码分配大约40 MB。 大约20 MB分配给String ,9 MB分配给Char[] ,5 MB分配给StringBuilder ,3 MB分配给Int32 。 public static void Main() { int size = 250000; var a = new int[size]; for (int i = […]

内存消耗.Net应用程序(Azure网站)

我们使用Azure网站作为我们的平台提供商,我正在调试与托管应用程序相关的一些内存问题,我们需要一种实用的方法来了解为什么我的应用程序会消耗这么多内存。 我们有50个在线用户,但是从120个线程中消耗了1.5 GB的IIS进程。 我尝试了内存转储,但我没有得到足够的线索来解决问题。 过去我使用的是yourkit.net分析器。 发现问题非常顺利,因为我能够监视线程及其内存使用情况。 我的工作集作为私有工作集中的内存量加上进程正在使用的可由其他进程共享的内存量非常接近于private_memory。 我的私有字节是我的进程分配的内存的当前大小(以字节为单位),无法与其他进程共享。 所以看起来我正在使用所有这些内存。 但无法决定我如何使用这么多内存。 我的系统每个用户的成本超过25兆字节。 这对我的可扩展性产生了真正的担忧。 我安装了NewRelic,但没有得到那么多的帮助。

如何打破视图控制器和数据源之间的引用循环

考虑这个简单的例子: public partial class TableViewController : UITableViewController { public TableViewController (IntPtr handle) : base (handle) { } protected override void Dispose (bool disposing) { Console.WriteLine (String.Format (“{0} controller disposed – {1}”, this.GetType (), this.GetHashCode ())); base.Dispose (disposing); } public override void ViewDidLoad () { //TableView.Source = new TableSource(this); TableView.Source = new TableSource(); } } public […]

托管环境中使用的最大堆? (.NET / JAVA)

您在托管环境(如Java或.NET)中个人使用的最大堆是多少? 你遇到的一些性能问题是什么,你最终得到的回报越少,堆越大?