Tag: 记忆

using语句 – 是否会触发垃圾回收?

我想要做的是将一些可疑函数包装在using语句中以触发垃圾收集,是否有人使用过或看过这样的东西? 这有用吗? 你对此有什么看法? using (String wrapper = new String(“maybe this will trigger gc”)){ //do stuff here //or maybe: // function1(); // function2(); // //and then see if its leaking? // eg: _mygeometry = new Geometry(); _mygeometry = null; // will GC free this ? } 你觉得这会有用吗? 你之前用过这个吗? 有什么我可以做的不是一个字符串? 我使用WPF,我尝试使用(var garbage = 1){}并且不起作用,我想String可能会。

什么是在Windows中长时间跟踪进程内存使用情况的最佳工具?

什么是最好的工具来监视我的C#/ .Net Windows服务在很长一段时间内的内存使用情况。 据我所知,像perfmon这样的工具可以在很短的时间内监控内存使用情况,但不会在很长一段时间内以图形方式监控。 我需要几天而不是几秒钟的趋势数据。 为了清楚起见,我希望在很长一段时间内以精细的细节级别监视内存使用情况,并让图表显示整个时间范围和详细程度。 我需要一个小的采样间隔和一个大图。

多少内存吃空列表和字典

多少内存吃空列表和字典? 如: List list = new List(); 指针本身在x86和64位x64操作系统上至少占用32位,但是列表本身呢? 有0条记录。 编辑:因为有一些评论喜欢这里有什么意义:我想知道我是否可以通过更改列表来保存一些字节,我知道它们总是空为null (想象你有一个类包含一些List在某些情况下正在使用它,在其他情况下它不是,在这种情况下,它具有像IsEmpty这样的布尔值而null而不是空列表可能会节省一些操作内存。(特别是如果你在操作内存中有数千个这样的类,每一点都很重要))

C#内存泄漏?

我有一个C#应用程序循环遍历数据表,并将它们推送到某些位置,如Sage和SQL表。 虽然它曾经工作得很好,但是在运行它一小时左右后,我莫名其妙地得到了Out of Memoryexception。 我注意到在任务管理器中,内存使用量每秒增加约1mb,并继续运行! 我的印象是垃圾收集会占用任何东西,但是为了确保我确保在使用它之后处理任何对象。 我知道没有代码就很难诊断,但是它有很多,而且我正在寻找更多的一般建议。

从SqlDataReader读取字符串时内存不足

我遇到了一些我无法弄清楚的最奇怪的事情。 我有一个SQL表,其中包含一堆存储在ntext字段中的报告。 当我将其中一个的值复制并粘贴到记事本中并保存它时(使用Visual Studio从不同行中的较小报告中获取值),原始txt文件大约为5Mb。 当我尝试使用SqlDataReader获取相同的数据并将其转换为字符串时,我得到一个内存不足exception。 以下是我尝试这样做的方法: string output = “”; string cmdtext = “SELECT ReportData FROM Reporting_Compiled WHERE CompiledReportTimeID = @CompiledReportTimeID”; SqlCommand cmd = new SqlCommand(cmdtext, conn); cmd.Parameters.Add(new SqlParameter(“CompiledReportTimeID”, CompiledReportTimeID)); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { output = reader.GetString(0); // <— exception happens here } reader.Close(); 我尝试创建一个对象和一个stringbuilder来获取数据,但我仍然得到相同的内存不足exception。 我也试过使用reader.GetValue(0).ToString()也无济于事。 查询只返回1行,当我在SQL Management Studio中运行时,它尽可能快乐。 抛出的exception是: System.OutOfMemoryException was […]

如何在一组大数字中找到平均值?

我有一大堆数字,可能在几千兆字节范围内。 第一个问题是我无法将所有这些存储在内存中。 其次,任何添加这些的尝试都会导致溢出。 我想要使​​用更多的滚动平均值,但它需要准确。 有任何想法吗? 这些都是浮点数。 这不是从数据库中读取的,而是从多个源收集的CSV文件。 它必须准确,因为它存储为秒的一部分(例如; 0.293482888929),滚动平均值可以是.2和.3之间的差值。 它是一组#,表示用户响应某些表单操作的时间。 例如,在显示消息框时,按“确定”或“取消”需要多长时间。 数据发送给我存储为秒。部分秒; 例如1.2347秒。 将它转换为毫秒,我溢出int,long等…相当快。 即使我不转换它,我仍然会很快溢出它。 我想下面的一个答案是正确的,也许我不必100%准确,只是在一个特定的StdDev内部的某个范围内看,我会足够接近。

C#List .ToArray表现不好?

我正在使用.Net 3.5(C#),我听说过C# List.ToArray的性能List.ToArray是“坏”,因为它为所有元素的内存副本形成一个新数组。 真的吗?

c#中类的内存对齐?

(顺便说一句。这是指32位操作系统) 一些更新: 这绝对是一个对齐问题 有时对齐(无论出于何种原因?)是如此糟糕,以至于对双倍的访问速度比其最快访问速度慢50倍。 在64位计算机上运行代码减少了问题,但我认为它仍然在两个时间之间交替(我可以通过将双倍更改为32位机器上的浮点数来获得类似结果) 在mono下运行代码没有问题 – 微软,你有没有机会从那些Novell家伙那里复制一些东西? 有没有办法在c#中记忆对齐类的分配? 以下演示(我认为!)没有正确对齐的双重错误。 它对存储在类中的double执行一些简单的数学运算,对每次运行进行计时,在变量上运行5次定时运行,然后再分配一个新变量并重新执行。 基本上结果看起来你要么具有快速,中速或慢速记忆位置(在我的古代处理器上,这些最终每次运行大约40,80或120ms) 我曾尝试过使用StructLayoutAttribute,但没有任何乐趣 – 也许其他事情正在发生? class Sample { class Variable { public double Value; } static void Main() { const int COUNT = 10000000; while (true) { var x = new Variable(); for (int inner = 0; inner < 5; ++inner) { // move allocation […]

C#访问内存映射文件

寻找代码示例来访问C#中的内存映射文件

是否有必要取消订阅活动?

不取消订阅c#中的事件可能有多严重? 是强制性还是可取的行动?