Tag: out of memory

为什么耗尽内存取决于对GC.GetTotalMemory的中间调用?

我编写的内存密集型程序内存不足:抛出OutOfMemoryexception。 在尝试减少内存使用量的过程中,我开始调用GC.GetTotalMemory(true)(将总内存使用量写入调试文件),这会触发垃圾收集。 出于某种原因,当调用此函数时,我不会再出现内存不足的exception。 如果我再次删除调用(保持其他所有内容相同),则会再次抛出exception。 根据我的理解,当内存压力增加时,会自动调用来收集垃圾,所以我不明白这种行为。 任何人都可以解释为什么只有在没有GC.collect调用时才抛出内存不足exception? 更新: 我正在使用VS 2010,但我正在将应用程序转移到框架3.5。 我相信碎片整理确实会导致我的问题。 我做了一些测试:当抛出exception时,对GC.gettotalmemory的调用告诉我我正在使用~800 * 10 ^ 6个字节。 但是,任务管理器告诉我应用程序使用的是1700 mb。 一个相当大的差异。 我现在计划只分配一次内存,并且永远不会释放任何大型数组但重用它们。 幸运的是,我的程序让我可以毫不费力地完成这个任务。

System.OutOfMemoryException – 当Entity Framework查询Varbinary类型的过大数据时

我正在尝试查询包含文件(1,2 Gb)的varbinary列。 我正在使用entity framework。 见下文: 要测试的数据库 CREATE TABLE [dbo].[BIGDATA] ( [id] [bigint] IDENTITY(1,1) NOT NULL, [BIGDATA] [varbinary](max) NULL, CONSTRAINT [PK_BIGDATA] PRIMARY KEY CLUSTERED ([id] ASC) ) ON [PRIMARY] 要测试的数据(任何1 Gb的文件) INSERT INTO [dbo].[BIGDATA]([BIGDATA]) VALUES ((SELECT BulkColumn FROM OPENROWSET(BULK N’C:\BigTest.txt’, SINGLE_BLOB) AS Document)) 控制器下载文件 public FileResult Download() { try { var context = new Models.ELOGTESTEEntities(); var […]

使用Json.Net序列化对象会导致Out of Memoryexception

免责声明:我确实完成了这里提供的大部分解决方案,但大部分都是在反序列化时讨论OOMexception。 我正在尝试使用Json.Net将对象(它是一个树)序列化为Json。 一切都适用于小对象但我在尝试使用大对象时会出现OOMexception。 由于它适用于相同数据类型的较小对象,我假设没有循环引用(我确实检查了我的数据结构)。 有没有办法我可以将我的对象转换为流(这是一个Windowsapp store应用程序)并使用该流生成Json? public static async Task SerializeIntoJson(string fileName, StorageFolder destinationFolder, Content content) { ITraceWriter traceWriter = new MemoryTraceWriter(); try { string jsonString = JsonConvert.SerializeObject(content, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, TypeNameHandling = TypeNameHandling.All, Error = ReportJsonErrors, TraceWriter = traceWriter, StringEscapeHandling = StringEscapeHandling.EscapeNonAscii }); System.Diagnostics.Debug.WriteLine(traceWriter); StorageFile file = await destinationFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); […]

IIS中的内存exception

我有一个具有MVC模板并使用REST的应用程序。 假设我有一个rest电话,它会触及特定的方法 void sample function() { // connects to db through entity framework // retrieves data and embeds in to list //returns JSON of data received. } 所以这里的问题是我测量了运行程序所需的内存。 它大约是40,000kb。 现在,当我给另一个rest时,内存不会在IIS中清理。它从40,000kb而不是零开始。 最后 ,如果我做3或4次调用,则会出现内存exception。 因此,每次调用后我都需要清理IIS内存,而是保留前一次调用的内存。 如何释放以前所有调用的内存。我通过处理模型和所有其他可能性尝试了各种解决方案。 如果部署在本地而不是IIS上,解决方案似乎有效。 有人可以帮帮我吗?

为什么我的新XmlTextReader(流)以兆字节为单位读入内存而不是正确流式传输?

当我将XML中的STREAMING转换为XmlReader时,我得到了Out of Memory Exceptions! 查看内存分析器,我们可以看到它一遍又一遍地调用StringBuilder.Append,导致大量128KB缓冲区填充所有内存。 这与“流媒体”相反。 它不应该加载多个4KB缓冲区。

使用GC.AddMemoryPressure()防止OutOfMemoryException?

我正在调试一种方法,我们用它来标记具有特定文本的图像,然后再将它们显示在我们的系统中。 标签方法目前看起来像这样: private static Image TagAsProductImage(Image image) { try { // Prepares the garbage collector for added memory pressure (500000 bytes is roughly 485 kilobytes). // Should solve some OutOfMemoryExceptions. GC.AddMemoryPressure(500000); using (Graphics graphics = Graphics.FromImage(image)) { // Create font. Font drawFont = new Font(“Tahoma”, image.Width*IMAGE_TAG_SIZE_FACTOR); // Create brush. SolidBrush drawBrush = new SolidBrush(Color.Black); // […]

C#Stringbuilder OutOfMemoryException

我写了以下function public void TestSB() { string str = “The quick brown fox jumps over the lazy dog.”; StringBuilder sb = new StringBuilder(); int j = 0; int len = 0; try { for (int i = 0; i < (10000000 * 2); i++) { j = i; len = sb.Length; sb.Append(str); } Console.WriteLine("Success ::" + […]

读取大TXT文件,内存不足exception

我想读大TXT文件大小是500 MB,首先我使用 var file = new StreamReader(_filePath).ReadToEnd(); var lines = file.Split(new[] { ‘\n’ }); 但它抛出内存exception然后我试图逐行读取但是在读取大约150万行之后再次抛出内存exception using (StreamReader r = new StreamReader(_filePath)) { while ((line = r.ReadLine()) != null) _lines.Add(line); } 或者我用过 foreach (var l in File.ReadLines(_filePath)) { _lines.Add(l); } 但我又收到了 mscorlib.dll中出现“System.OutOfMemoryException”类型的exception,但未在用户代码中处理 我的机器是function强大的机器,有8GB的内存,所以它不应该是我的机器问题。 ps:我试图在NotePadd ++中打开这个文件,我收到’文件太大而无法打开’exception。

用于字符串连接的StringBuilder抛出OutOfMemoryException

我们大多倾向于遵循上述最佳做法。 看看String vs StringBuilder 但是, 即使有足够的可用内存, StringBuilder也可能抛出OutOfMemoryException 。 它抛出OOMexception,因为它需要“连续的内存块”。 一些链接供参考StringBuilder OutOfMemoryException 而且还有更多…… 你们当中有多少人遇到这个问题或意识到你们做了什么来解决这个问题? 有什么我想念的吗? PS:我没有意识到这一点。 我已经改写了这个问题。 ***同样的事情与手动连接一起工作(我将validation这一点并更新SO)。 引起我担忧的另一件事是系统中有足够的内存。 这就是我在这里提出这个问题的原因,以检查是否有人遇到这个问题或者代码有什么严重错误。

如何在.NET中使用大位图?

我正在尝试编写轻量级图像查看应用程序。 但是,.NET存在系统内存限制。 当尝试加载大位图( 9000 x 9000 px或更大,24位)时,我得到一个System.OutOfMemoryException。 这是在具有2GB RAM(其中1.3GB用完)的Windows 2000 PC上。 尝试加载文件也需要很长时间。 以下代码生成此错误: Image image = new Bitmap(filename); using (Graphics gfx = this.CreateGraphics()) { gfx.DrawImage(image, new Point(0, 0)); } 这段代码也是如此: Stream stream = (Stream)File.OpenRead(filename); Image image = Image.FromStream(stream, false, false); using (Graphics gfx = this.CreateGraphics()) { gfx.DrawImage(image, new Rectangle(0, 0, 100, 100), 4000, 4000, 100, […]