Tag: 内存

大型多维数组(Jagged Array)C#的解决方法?

我正在尝试初始化三维数组以加载体素世界。 地图的总大小应为( 2048/1024/2048 )。 我试图初始化一个“int”的锯齿状数组 ,但我抛出了一个内存exception。 尺寸限制是多少? 我桌子的大小:2048 * 1024 * 2048 = 4’191’893’824 有人知道解决这个问题吗? // System.OutOfMemoryException here ! int[][][] matrice = CreateJaggedArray(2048,1024,2048); // if i try normal Initialization I also throws the exception int[, ,] matrice = new int[2048,1024,2048]; static T CreateJaggedArray(params int[] lengths) { return (T)InitializeJaggedArray(typeof(T).GetElementType(), 0, lengths); } static object InitializeJaggedArray(Type type, […]

如何使用16字节对齐分配内存?

我使用Marshal.GlobalHAlloc来分配内存。 正如文档所说:“此方法从Kernel32.dll公开Win32 LocalAlloc函数。” GlobalAlloc的文档说它将是8字节对齐,但LocalAlloc没有说任何关于对齐的内容。 例如,我想分配1024个字节,并确保它与16对齐。当我分配1024 + 16个字节然后检查指针%16时它会工作吗? 如果结果为0则意味着内存对齐,当它不为0时,我只是增加指针以符合我的期望。 问题是我不知道,如果我有对齐指针它真的在物理内存中对齐?

MemoryStream.WriteTo(Stream destinationStream)与Stream.CopyTo(Stream destinationStream)

哪一个更好: MemoryStream.WriteTo(Stream destinationStream)或Stream.CopyTo(Stream destinationStream) ?? 我正在谈论没有Buffer的这两种方法的比较,因为我这样做: Stream str = File.Open(“SomeFile.file”); MemoryStream mstr = new MemoryStream(File.ReadAllBytes(“SomeFile.file”)); using(var Ms = File.Create(“NewFile.file”, 8 * 1024)) { str.CopyTo(Ms) or mstr.WriteTo(Ms);// Which one will be better?? } 更新 这是我想要做的: 打开文件[说“X”类型文件] 解析内容 从这里我得到一堆新的流[3~4个文件] 解析一个流 提取成千上万的文件[流是图像文件] 将其他流保存到文件 编辑所有文件 生成新的“X”类型文件。 我写了一些实际工作正常的代码。 但是现在我正在优化代码以提高效率。

如何在浏览器中流式传输Pdf时设置文件名?

不确定如何说出这个问题…欢迎编辑! 无论如何……这里去了。 我目前使用Crystal Reports生成Pdfs并将输出流式传输给用户。 我的代码如下所示: System.IO.MemoryStream stream = new System.IO.MemoryStream(); stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); this.Response.Clear(); this.Response.Buffer = true; this.Response.ContentType = “application/pdf”; this.Response.BinaryWrite(stream.ToArray()); this.Response.End(); 此代码运行后,它将Pdf流式传输到浏览器,打开Acrobat Reader。 效果很好! 我的问题是当用户尝试保存文件时,默认为实际文件名…在这种情况下,它默认为CrystalReportPage.pdf。 无论如何我可以设置这个吗? 如果是这样,怎么样? 任何帮助,将不胜感激。

从隔离存储加载图像时出现内存不足exception

我在这个特定的代码中得到了OutofMemoryException 。 public BitmapImage GetImage(int pageNo) { if (!this._isLoaded) { this.Load(); } using (IsolatedStorageFileStream stream = IsolatedStorageFile.GetUserStoreForApplication().OpenFile(this.FileNames[pageNo], FileMode.Open, FileAccess.Read)) { BitmapImage image = new BitmapImage(); image.SetSource(stream); return image; } } 在image.SetSource(stream)处发生内存不足exception。 我不能将uri设置为null因为我必须返回图像。 这是什么解决方法? 在这帮帮我

C#:使用Bitmaps时如何减少内存和CPU消耗?

我有一个Windows应用程序项目,处理图像编辑(裁剪和resize)。 不幸的是,这些图像处理消耗了大量的内存和CPU资源(很容易达到600MB或50%cpu),而且只需裁剪和调整一个重量为2.5MB(2300 * 5400px)的gif图像。 更重要的是,由于大量的资源消耗,程序在resize时卡住… public static Image Resize(Image imgToResize, Size size) { Bitmap b = new Bitmap(size.Width, size.Height); Graphics g = Graphics.FromImage((Image)b); g.InterpolationMode = InterpolationMode.Default; g.SmoothingMode = SmoothingMode.HighSpeed; g.PixelOffsetMode = PixelOffsetMode.Default; g.DrawImage(imgToResize, 0, 0, size.Width, size.Height); g.Dispose(); return (Image)b; } public static Image Crop(Image img, Point p1, Point p2) { Rectangle cropArea = new […]

锁定是否确保从缓存中刷新读取和写入? 如果是这样,怎么样?

我正在阅读这篇关于无锁线程同步的MSDN文章 。 这篇文章似乎推断,只要你在访问共享变量之前输入一个锁,那么这些变量将是最新的(至少在.Net 2.0中)。 我想到这是怎么可能的? .Net中的锁只是所有线程在访问内存之前检查的任意对象,但锁本身并不知道正在访问的内存位置。 如果我有一个线程更新变量,甚至整个内存块,那么当进入/退出锁时,这些更新如何保证从CPU缓存刷新? 所有内存访问是否在锁内有效地变为易失性?

堆栈和堆在c锐利

可能重复: 当类存储在堆(.NET)上时,为什么结构存储在堆栈中? 任何人都可以告诉我如何分配内存以确定哪个对象存储在堆栈中以及哪些对象存储在内存的堆部分中?

内存优化OrderBy和Take?

我有9 GB的数据,我只想要10行。 当我做: data.OrderBy(datum => datum.Column1) .Take(10) .ToArray(); 我得到一个OutOfMemoryException 。 我想使用OrderByAndTake方法,针对较低的内存消耗进行了优化。 这很容易写,但我猜有人已经这样做了。 我在哪里可以找到它。 编辑 :这是Linq-to-objects。 数据来自文件。 如果Column1值小于10个最大值的当前列表,则可以丢弃每一行。

在C#中用另一个替换对象实例

在这个问题中,我想知道是否以及如何做到这一点。 这种技术似乎是非常糟糕的做法,但似乎我正在使用的API(UnityEditor)正在做这样的事情,我只是很好奇。 如果对同一对象有多个引用,是否可以将新对象实例化到同一个内存槽中,以便所有先前的引用都指向新对象? 我发现唯一可行的方法是使用非托管C ++。 基本上发生以下情况: // Original prefab GameObject prefab = x; prefab.tag = “Untagged”; // A copy of the original prefab GameObject prefabCopy = PrefabUtility.InstantiatePrefab(prefab) as GameObject; prefabCopy.tag = “EditorOnly”; // Change from initial value “Untagged” Debug.Log(prefab.tag); // “Untagged” – expected Debug.Log(prefabCopy.tag); // “EditorOnly” – expected // Replace contents of prefab file with […]