服务器正在泄漏内存;但进程看起来很好
我写了WCF (c#) Windows Service application,在我看来,Windows服务正在泄漏内存. 根据Windows的记忆压力,从Windows服务开始时从24 Gb到44 Gb在屏幕截图时(30 hours稍后) 我们有两个问题. 我们试图使用 ants存储器profiler 模拟泄漏,我们 找不到问题. WCF服务本身没有泄漏内存.内存用法是18 Gb (从开始的开始 服务). 如何调查这个问题?是什么导致这种高内存压力? 解决方案 在我们看来,这是预期的行为.我们从未将这种行为视为发展 机器的内存较少.仅当92%-95%的内存是 "占领"了一个垃圾收集. 我们查看这个问题的原因是因为一段时间后流程运行速度较慢. 有趣的读物: .net应用程序的记忆使用 - 高未使用.NET和不受管理的内存和碎片 = 2&t = 4389 并将这本书放在我的书架上: 谢谢大家,
14 2024-04-26
编程技术问答社区
实体框架的这种实现是否会泄漏内存?
我只是在使用语句中使用Web应用程序或控制台应用程序中的语句中使用的实体上下文是否处置了实体上下文. 谢谢! using System; using System.Web; namespace Foo.Model { public partial class FooEntities : ObjectContext { private const string CurrentContextKey = "FooEntities.Current"; [ThreadStatic] private static FooEntities _currentOnThreadStatic; private FooEntities _previousContext; /// /// Gets the current
4 2024-04-26
编程技术问答社区
内存泄漏问题:处置或不处置管理资源?
我在计算昂贵的基于内容的图像检索(CBIR).NET应用程序 中经历了奇怪的内存泄漏 这个概念是有带有线程循环的服务类,该类别从某些源捕获图像,然后将它们传递给图像标记线程以进行注释. 图像标签以指定的时间间隔从存储库查询存储库,并存储在其内存缓存(字典)中,以避免频繁的DB命中. 项目中的类是: class Tag { public Guid Id { get; set; } // tag id public string Name { get; set; } // tag name: e.g. 'sky','forest','road',... public byte[] Jpeg { get; set; } // tag jpeg image patch sample } class IRepository { public IEnumerable FindAll(); } class S
14 2024-04-26
编程技术问答社区
将IEnumerable<byte[]>数组作为byte**参数传递给非托管函数时,会出现内存泄漏?
这是分配和自由处理到传递给未托管DLL的托管数据的正确方法吗? 有未托管的DLL带有导出功能 void Function(byte** ppData, int N); 我需要通过它IEnumerable afids var handles = afids.Select(afid => GCHandle.Alloc(afid, GCHandleType.Pinned)); var ptrs = handles.Select(h => h.AddrOfPinnedObject()); IntPtr[] afidPtrs = ptrs.ToArray(); uint N = (uint)afidPtrs.Length; Function(afidPtrs, N); handles.ToList().ForEach(h => h.Free()); 我得到托管内存泄漏并在即时窗口中获得sos.dll给GCRoot DOMAIN(00275030)
8 2024-04-26
编程技术问答社区
如何在选定的机器上找到一个.NET远程内存泄漏?
内存泄漏并非每台机器上都发生,而是在我的工作中可靠地发生,并且在现场看起来接近10%. 我有一种使用Windows服务来监视用户输入来启动警报的产品,该产品与仅用于坐在系统托盘中的Visual应用程序配对,并允许用户更改配置. 我选择使用远程对象在两个过程之间共享配置信息.在服务中,它称为ServiceConfig,在Visual应用程序中称为ConfigData.该对象首先在服务器上创建,然后远程远程如下: try { InitializeComponent(); setAppInitDLL(thisDirectory); serviceConfig = new serviceConfigData(); Regex getVersion = new Regex("Version=(?[^,]*)"); if (getVersion.IsMatch(Assembly.GetExecutingAssembly().Full
6 2024-04-26
编程技术问答社区
c#应用程序中的ODBC泄漏内存
我似乎有记忆泄漏.我在Stackoverflow上找到了建议"使用"方法的帖子,但这似乎并不能解决问题. 我正在使用红色大门存储器探查器,显示不受管理的内存不断上升. 这是我要测试的简单应用程序: namespace TimerDebug { public partial class TimerDebug : ServiceBase { public TimerDebug() { InitializeComponent(); } protected override void OnStart(string[] args) { // Create Timer Timer MyTimer = new Timer(500); MyTimer.Elapsed += MyTimer_Elapsed; // Start Timer MyTim
12 2024-04-26
编程技术问答社区
WPF Windows Formshost内存泄漏
我有一个WPF TABCONTROL,其中包含每个TabPage中的WindowsFormshost. 用户可以根据需要添加和删除TABPAGE:当用户删除选项卡时,我显然会处理子控制和主机本身. 使用VS诊断工具,我发现WindowsFormshost的泄漏: 我还使用空的WindowsFormshost(没有内在的孩子)对框架4.0和4.7.2进行了测试来重现问题.类似: 我该如何解决? gc.collect()不执行技巧. 解决方案 已解决从父级布局中删除WindowsFormshost元素: public class WindowsFormsHostEx : WindowsFormsHost { public WindowsFormsHostEx() { } protected override void Dispose(bool disposing) {
16 2024-04-26
编程技术问答社区
内存泄漏,但在哪里?
我不明白这里泄漏了什么 using GDI = System.Drawing; public partial class MainWindow : Window { [DllImport("gdi32.dll")] private static extern bool DeleteObject(IntPtr obj); public MainWindow() { InitializeComponent(); var timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(50) }; timer.Tick += (s, a) => { using (var bitmap = new GDI.Bitmap(1000, 1000)) {
4 2024-04-25
编程技术问答社区
C# WebAPI垃圾收集
我刚刚将我的第一个C#WebAPI应用程序交付给第一个客户.在正常负载下,最初的性能甚至比我预期的要好.最初. 一切都很好,直到有时内存,并且垃圾收集开始运行骚乱(如"收集尚未垃圾的对象"中的骚乱).那时,有多个W3WP线程,总共有十个RAM,每个工人的单位演出.重新启动IIS之后,一切都恢复了正常,但是记忆使用量再次上升. 如果我错了,请纠正我,但是 C#不应该有自动垃圾收集? GC不容易收集WebAPI应用程序的垃圾? ,请帮助我: 如何明确说明应该收集什么GC,从而防止内存泄漏? someBigList = null;要走的方式吗? 如何检测内存泄漏的位置? 编辑:让我澄清一些东西. 我的.NET WebAPI应用程序主要是一堆 public class MyApiController:ApiController { [HttpGet] public MyObjectClass[] MyApi(string someP
18 2024-04-25
编程技术问答社区
授权转换打破了平等,无法与事件断开联系
我最近发现了代表的一些奇怪行为.看来,将一名代表施加给其他一些(兼容,甚至相同)的人打破了代表的平等.假设我们有一些方法: public class Foobar { public void SomeMethod(object sender, EventArgs e); } 现在让我们做一些代表: var foo = new Foobar(); var first = new EventHandler(foo.SomeMethod); var second = new EventHandler(foo.SomeMethod); 当然,由于具有相同目标,方法和调用列表的代表被认为是平等的,因此此断言将通过: Assert.AreEqual(first, second); 但是这个断言不会: Assert.AreEqual(new EventHandler(first), new EventHandler(second)); 但是,下一个断言将通
2 2024-04-25
编程技术问答社区
授权转换打破了平等,无法与事件断开联系
我最近发现了代表的一些奇怪行为.看来,将一名代表施加给其他一些(兼容,甚至相同)的人打破了代表的平等.假设我们有一些方法: public class Foobar { public void SomeMethod(object sender, EventArgs e); } 现在让我们做一些代表: var foo = new Foobar(); var first = new EventHandler(foo.SomeMethod); var second = new EventHandler(foo.SomeMethod); 当然,由于具有相同目标,方法和调用列表的代表被认为是平等的,因此此断言将通过: Assert.AreEqual(first, second); 但是这个断言不会: Assert.AreEqual(new EventHandler(first), new EventHandler(second)); 但是,下一个断言将通
12 2024-04-25
编程技术问答社区
ADO.NET+大量的INSERTs+Excel+C#="一个糟糕的时代 "吗?
基本上,我需要将一堆数据插入到Excel文件中.创建OLEDB连接似乎是最快的方法,但我已经看到已经遇到了内存问题.当我执行插入查询时,该过程使用的内存似乎在不断增长.我将它们缩小到只有在输出到Excel文件时才会发生(内存保持稳定而没有输出到Excel).我关闭并重新打开了每个工作表之间的连接,但这似乎对内存使用情况并没有影响(因为Dispose()).数据是成功编写的,因为我可以使用相对较小的数据集进行验证.如果有人有洞察力,这将不胜感激. initializeadoconn()在构造函数中调用 initadoconninsertcomm()创建插入参数化insert Query writerecord()每当编写新记录时都会调用.根据需要创建新的工作表. public bool initializeADOConn() { /* Set up the connection string and connect.*/
4 2024-04-24
编程技术问答社区
如何通过处置静态方法来防止故障(内存泄漏)?
我正在使用asp.net 4.0. 从最近几周开始,很少有用户抱怨应用程序开始出现故障. GridView突然开始显示下拉列表控件的内容,即当天的任何时间点可能访问了同一用户或另一个并发用户.同样,下拉控件可能会被任何旧结果集的RowID而不是实际项目填充. 我遇到了一篇文章:用户在asp.net中查看其他用户数据作者在其中讨论负责内存泄漏行为的静态对象. 它使我想起了我的项目中的一个Static的课程,并包含public static方法.此类包含填充下拉列表的方法,返回查询输入的数据集或根据查询输入返回标量对象. 此类的提取物如下: public static class reuse { public static void FillDropDownList(string Query, DropDownList DropDownName, string ConnectionStringParameter) { SqlDat
16 2024-04-24
编程技术问答社区
Windows媒体播放器设计器视图抛出CPU和lib错误
我有一个名为videoform的表格,该表格有一个名为player的Windows Media播放器. public AxWMPLib.AxWindowsMediaPlayer player; 当我打开videoframe.cs [设计]时,我会得到两个错误: 找不到类型'axwmplib.axwindowsmediaplayer' 变量"播放器"是未宣布或从未分配的. 如果我在解决方案中创建了一个新表单并尝试在其中添加Windows Media Player,我会得到此错误: 无法创建组件" axhost"错误消息以下: 'System.Reflection.ReflectionTypeloadexception:无法加载一个或 更多要求的类型. (下面列出的大量类型基本上等于"工具箱需要进行控制") 我尝试了:重新启动视觉工作室,重新启​​动计算机,删除和重新介绍库,切换到32,建造,然后改回64并再次建造,然后手动找到Lib我的机器上的
10 2024-04-24
编程技术问答社区
为什么可以取消任务导致内存泄漏?
我有一个程序,其中一部分从控制台读取了另一个程序的输入. 所以我有一个看起来像这样的Task: public async Task ConsoleHandler() { while (true) { try { string command = (await Console.In.ReadLineAsync().AsCancellable( _cancellationTokenSource.Token))!; //Process the command } catch (Exception ex) { //Do something to report then wait for next command } } } 通常Console.ReadLin
2 2024-04-24
编程技术问答社区
c# 循环中的内存泄漏
public void DoPing(object state) { string host = state as string; m_lastPingResult = false; while (!m_pingThreadShouldStop.WaitOne(250)) { Ping p = new Ping(); try { PingReply reply = p.Send(host, 3000); if (reply.Status == IPStatus.Success) { m_lastPingResult = true; } else { m_lastPingResult = false;
12 2024-04-24
编程技术问答社区
wpf C#中的内存泄漏问题
我正在使用galasoft.mvvmlight Suite和WPF工具包开发WPF MVVM(在v3.5中),适用于DataGrid和DatePicker.但是,每次我在MainWindow中加载a UserControl时,我都会在应用程序中面临许多内存泄漏.我试图通过Scitech Memory Profiler来解决确切的问题,尽管我有一些严重的问题: 如何从vm中的Event中解开/解开RelayCommand? MSCORLIB和PresentationFramework也消耗了大量内存,其中大多数是strings.我不知道它们来自哪里. 请帮助. 解决方案 请查看这些文章以了解WPF中记忆泄漏的原因,解决方案以及如何找到它们 - 查找基于WPF的内存泄漏 申请: http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-lasigation--a
8 2024-04-23
编程技术问答社区
C# WPF中的内存泄漏
处置所有使用的对象后,我需要减少C#WPF中的内存泄漏.但是我无法通过使用以下代码段完全减少内存消耗. 这是我的代码: string str; Uri uri; private void Button_Click(object sender, RoutedEventArgs e) // "Load" Button { if(img.Source!=null) Unload(); str = "F://Photos//Parthi//IMG_20141128_172826244.jpg"; // File Size: 0.643 MB uri = new Uri(str); img.Source = new BitmapImage(uri); } private void Button_Click_1(object sender, RoutedEven
4 2024-04-23
编程技术问答社区
长时间运行的应用程序速度减慢
有一个由三个可执行文件组成的应用程序.其中之一 - 一个调度程序,运行其他可执行文件.调度员在完成时从可执行文件中接收代码.也就是说,只有调度程序始终运行,其他可执行文件卸载并再次加载.该应用程序在服务点运行,并全天候工作.在第一次启动时,应用程序可以快速运行.归根结底,该应用程序的工作速度非常慢.这种行为的原因是什么? 解决方案 随着时间的流逝,可能会有很多原因.从缓慢的内存泄漏到反病毒的任何地方.您能做的最好的方法是尝试构建有关首先要查看应用程序的区域的证据(数据).尽量不要与许多开发人员讨论,因为每个人都会对可能出错的情况有不同的看法.获取数据! 如何获取数据: perfmon perfmon是你的朋友.您可以查看很多计数器(系统范围和特定过程).因此,您可以首先分析4个巨头(即记忆,磁盘使用情况,CPU和网络).有一个很多帖子在那里哪些计数器是最好的,所以我不会去在此处介绍太多的详细信息. windbg 如果您确实看到记忆正在增长,而不是被收集到,那么是
10 2024-04-23
编程技术问答社区
如何在base64转换后释放内存
我正在尝试流式传输文件的内容. 该代码适用于较小的文件,但是对于较大的文件,我会遇到一个失踪错误. public void StreamEncode(FileStream inputStream, TextWriter tw) { byte[] base64Block = new byte[BLOCK_SIZE]; int bytesRead = 0; try { do { // read one block from the input stream bytesRead = inputStream.Read(base64Block, 0, base64Block.Length); // encode the base64 string string base64String = Convert.ToBase64Stri
8 2024-04-23
编程技术问答社区