Tag: 内存

记忆流和大对象堆

我必须使用WCF通过不可靠的连接在计算机之间传输大文件。 因为我希望能够恢复文件并且我不希望受到WCF的文件大小限制,所以我将这些文件分块为1MB。 这些“块”以流的forms传输。 到目前为止哪个方面效果很好。 我的步骤是: 打开文件流 从文件中读取块到byte []并创建内存流 转移块 返回2.直到整个文件发送 我的问题在第2步。我假设当我从字节数组创建一个内存流时,它将最终在LOH上并最终导致一个outofmemoryexception。 我实际上无法创建此错误,也许我的假设是错误的。 现在,我不想在消息中发送byte [],因为WCF会告诉我数组大小太大。 我可以更改允许的最大数组大小和/或我的块的大小,但我希望有另一种解决方案。 我的实际问题: 我目前的解决方案是否会在LOH上创建对象,这会导致我的问题吗? 有没有更好的方法来解决这个问题? 顺便说一句:在接收端,我简单地从到达的流中读取较小的块并将它们直接写入文件,因此不涉及大字节数组。 编辑: 当前解决方案 for (int i = resumeChunk; i < chunks; i++) { byte[] buffer = new byte[chunkSize]; fileStream.Position = i * chunkSize; int actualLength = fileStream.Read(buffer, 0, (int)chunkSize); Array.Resize(ref buffer, actualLength); using (MemoryStream stream = new […]

自动滚动文本框使用的内存比预期的多

我有一个应用程序使用TextBox将消息记录到屏幕上。 更新function使用一些Win32函数来确保框自动滚动到结尾,除非用户正在查看另一行。 这是更新function: private bool logToScreen = true; // Constants for extern calls to various scrollbar functions private const int SB_HORZ = 0x0; private const int SB_VERT = 0x1; private const int WM_HSCROLL = 0x114; private const int WM_VSCROLL = 0x115; private const int SB_THUMBPOSITION = 4; private const int SB_BOTTOM = 7; private const […]

ADO .NET与SQL Server Management Studio – ADO表现更差

我在ADO.NET C#和Sql Server Management工作室中运行相同的命令。 通过C#运行的SQL执行得更糟 – 内存使用情况更糟(耗尽所有可用内存),从而导致数据库执行时间增加。 管理工作室并不完美(它也会导致sql server耗尽内存),但它并不像通过ADO.NET那么糟糕。 我正在运行:Windows 7,Sql Server 2008 R2,10.50.1600。 C#.NET 3.5。 Sql Server管理Studio 2008 R2。 所有程序和数据库都在我的本地开发机器上。 我正在运行的SQL是40个创建视图,40个在2个数据库上创建唯一索引。 我需要动态执行此操作,因为我们正在运行两个数据库之间的数据库比较(出于不相关的原因,我们需要比较视图而不是表格)。 由于性能是一个问题,我们不能一直留下视图和索引。 SQL看起来像这样: create view [dbo].[view_datacompare_2011106] with schemabinding as ( SELECT t.[ID], t.[Column1], t.[Column2], t.[Column3], FROM dbo.Table t WHERE t.[ID] in (‘1′,’2′,’3′,’4’) ) go create unique clustered index [index_datacompare_2011106] on [dbo].[view_datacompare_2011106] (ID) go […]

处理大型位图(最高3GB)

我正在做一些大学项目并且遇到内存问题。 我在硬盘上加载一个大约1,5GB的位图,代码如下: Bitmap bmp = new Bitmap(pathToFile); 问题是新创建的Bitmap对象使用大约3,5GB的RAM,这是我无法理解的(这真的是大包装:E)。 我需要到像素数组,并且使用Bitmap类非常有用(我稍后使用LockBits()方法,并且每个字节处理数组字节)但在这种情况下它是完全阻塞。 所以这是我的问题: 是否有任何简单的方法来提取像素arrays而不需要额外的2gb? 我正在使用c#来提取所需的数组,后来用c ++处理 – 也许我可以用c ++提取所有需要的数据(但转换问题出现在这里 – 我专注于24bgr格式)? PS:我需要将整个位图保留在内存中,因此将其拆分为部分并不是解决方案。 PS2:只是澄清一些问题:我知道文件扩展名和文件格式之间的区别。 加载的文件是未压缩的位图,每个像素大小为3个字节~1.42GB(16k x 32k像素),那么为什么Bitmap对象的大两倍多呢? 任何解压缩问题和转换为其他格式都没有发生。

类对象的内存分配

我在面试中被问过这个问题。 请帮我找到答案。 假设您有一个Employee类。 它有2个变量 – 1.字符串名称2. Int年龄 现在, Employee emp = new Employee(); 现在提出的问题是: 对象emp存储在内存中,即堆栈或堆中,如何? 名称和年龄变量存储在内存中的位置如何? 这句话中的每个单词都做了什么,即员工做了什么……然后才知道……然后是新的..然后是员工..然后()..然后; 上述声明与Employee emp之间有什么区别; ? 告诉内存分配。? 请回复您的宝贵意见。

使用单个值填充数组的最快方法

我想用我所拥有的单个值来填充2D数组,但是,我想尽可能以最快的方式完成2D数组的长度总计200k +并且随着时间的推移将有超过200个这样的数组。 我已经查看了Buffer.BlockCopy和Array.Copy,但是,它们都将数组作为源/目标,其中我唯一的数组是目标,源是单个值。 填充数组的最快方法是源是单个值而不是数组?

内存流作为数据库

我目前正在考虑使用SQLite作为我的C#项目的数据库引擎,但我遇到了以下问题:我找不到任何用于内存存储的API。 我想要实现的目标如下: 在程序启动时,我想将db文件(从HDD)加载到内存中。 在执行程序期间,我想将此内存流用作真正的数据库(读取,写入,插入,选择等)。 关闭后将流保存到文件中。 任何人都可以以正确的方式指出我或建议另一个更适合此目的的数据库引擎。

iTextSharp + FileStream =损坏的PDF文件

我正在尝试使用iTextSharp创建一个pdf文件。 我的尝试将pdf的内容写入MemoryStream,因此我可以将结果写入文件和数据库BLOB。 文件被创建,大小约为21kB,当使用Notepad ++打开时,它看起来像一个pdf。 但是我的PDF查看器说它已经被破坏了。 这是一个小代码片段(只尝试写入文件,而不是数据库): Document myDocument = new Document(); MemoryStream myMemoryStream = new MemoryStream(); PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream); myDocument.Open(); // Content of the pdf gets inserted here using (FileStream fs = File.Create(“D:\\…\\aTestFile.pdf”)) { myMemoryStream.WriteTo(fs); } myMemoryStream.Close(); 我犯的错误在哪里? 谢谢你,诺伯特

在c#中分配“非托管”内存

我在c#中编写一个使用C ++库的程序,由于某种原因,我需要分配一个非托管缓冲区来将它传递给lib。 有没有办法在c#中做到这一点? 基本上我只需要在C#中做一个malloc … 谢谢

Windows Phone 8中BitmapImage / Image控件的内存消耗

我正在测试一个WP8应用程序和它的图像查看器来显示许多图像,我发现应用程序的内存消耗正在提高,并希望找到如何解决它。 我已经从网上阅读了一些文章,但这些文章提供的解决方案无法在我的应用上运行,请阅读下面的历史记录。 首先,我找到了文章“ Windows Phone 7的图像提示 ”并下载了它的样本来进行清洁图像缓存测试,它正在使用1个图像 。 然后出于测试目的,我在应用程序内部使用15个离线图像编译此应用程序,并设置为“内容”,请从此处下载测试应用程序。 我的测试步骤是: (1) Launch app (2) Go to Image Caching page (3) Enable checkbox “Avoid Image Caching” (4) Continuously tapping button Show/Clear (5) Keep watching the memory status textblock at the bottom 当我测试我的应用程序时,内存正在提升,如16.02MB =>显示(19.32MB)=>清除( 16.15MB )=>显示(20.18MB)=>清除( 17.03MB )…等内存即使离开缓存页面也不会被释放并再次进入缓存页面。 似乎文章“ Windows Phone 7的图像提示 ”的解决方案仅适用于1个图像 。 这是“ Windows Phone […]