即使退出该function,.NET内存也无法释放

我有一些C#代码读取一个巨大的文件,经过一些操作后,将其引用设置为null并退出该函数,但内存不会释放。 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlString); XmlService.ConvertExcelToXML(xmlDoc); int sdfid = 320; XmlService.CompareXML(xmlDoc, ref sdfid, pkid); xmlDoc.RemoveAll(); xmlDoc = null; xmlDoc是一个非常大的字符串,通常大约50 MB。 当我退出该function时,该内存永久占用,我必须每天重启我的服务几次,否则它的内存使用量达到1GB。 我曾尝试使用GC.Collect,但没有用。 先感谢您。 编辑 这是XmlService的类声明。 它没有变数。 所有方法都是静态的 public class XmlService ConvertExcelToXML函数的代码 public static bool ConvertExcelToXML(XmlDocument xmlDoc) { XmlNamespaceManager nm = new XmlNamespaceManager(xmlDoc.NameTable); nm.AddNamespace(“z”, “urn:schemas-microsoft-com:office:spreadsheet”); nm.AddNamespace(“o”, “urn:schemas-microsoft-com:office:office”); nm.AddNamespace(“x”, “urn:schemas-microsoft-com:office:excel”); nm.AddNamespace(“ss”, “urn:schemas-microsoft-com:office:spreadsheet”); nm.AddNamespace(“html”, “http://www.w3.org/TR/REC-html40”); XmlNodeList […]

Visual Studio 2012 / C#中断了代码执行,没有设置断点

我在Visual Studio 2012 / C#中遇到了问题,这让我很生气。 我在C#文件中有一行特殊的代码,没有设置断点。 每次执行此行时,调试器都会中断我的代码执行,就像设置了断点一样。 我注意到的唯一区别是左侧的箭头,表示当前步骤。 通常此箭头为黄色(设置断点时)。 就我而言,它是灰色的。 我一直在寻找解决方案,但没有找到任何有用的东西。 我尝试删除所有断点,构建项目,重建项目,清理项目,它仍然出现。 有没有人有同样的问题,并找到了解决方案? 正常箭头: 在我的情况下箭头:

在System.Windows.Forms.DataGrid中双击单元格时,不会触发MouseDoubleClick事件

我需要处理在ReadOnly DataGrid中双击单元格时(不幸的是不是DataGridView),但是没有触发MouseDoubleClick事件。 如何让事件发生火灾? 我正在创建DataGrid并订阅该事件: var table = new DataTable(); table.Columns.Add(“foo”); table.Rows.Add(new object[] { “foo” }); table.Rows.Add(new object[] { “foo” }); dataGrid1.DataSource = table; dataGrid1.MouseDoubleClick += DataGrid1_MouseDoubleClick; dataGrid1.ReadOnly = true; 只有当我双击单元格之间的边界时才会发生此事件。 当我单击一个单元格时,会出现一个ReadOnly文本框,它似乎吃掉了第二次单击事件: 我在专家交流中找到了一个旧线程 ,他们在那里说了很多: 好吧,不仅在单击一个单元格时没有捕获双击事件,它还没有被datagrid消息队列捕获。 我inheritance了一个数据网格并覆盖了wndproc,检查我是否能检测到双击。 它捕获单击消息,但没有WM_LBUTTONDBLCLK消息通过。 我怀疑MS具有子单元格控件(请参阅DataGridColumnStyle类和派生类)挂钩网格控件并防止消息甚至继续到网格。 试图预先挂钩那个孩子或网格可能会产生相当混乱的结果,所以我避免这样做。 我真的不需要TextBox控件,所以如果有办法抑制单元格“激活”或显示它,那对我来说这也是一个很好的解决方案。 注意:我知道DataGrid已经过时,但我正在处理遗留代码,请不要评论告诉我使用DataGridView – 它对我没有帮助。

如何在RSAParameters上设置公钥和私钥以用于RSACryptoServiceProvider?

我在线阅读了一些教程,并生成了公钥和私钥,但是如何将它们设置为在C#中使用? 这是我有的: string publicKey = “…”; string privateKey = “….”; UnicodeEncoding ByteConverter = new UnicodeEncoding(); byte[] dataToEncrypt = ByteConverter.GetBytes(“Data to Encrypt”); byte[] encryptedData; byte[] decryptedData; string decrptedStr = “”; using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { RSAParameters myRSAParameters = RSA.ExportParameters(true); myRSAParameters.Modulus = ByteConverter.GetBytes(publicKey); myRSAParameters.Exponent = ByteConverter.GetBytes(privateKey); encryptedData = RSAEncrypt(dataToEncrypt, myRSAParameters, false); decryptedData = RSADecrypt(encryptedData, myRSAParameters, […]

将浮点数显示为文本框类型“数字”

关于将文本框字符串转换为浮点值或允许类型=“数字”的文本框允许小数点有很多问题,但是,我似乎无法找到与显示浮点值相关的任何内容一个文本框,其类型设置为“数字”。 到目前为止,我所拥有的是一个text = type =“number”和step =“0.01”。 它的最小值为“0”。 它显示如下: 它适用于用户输入并将数据保存到可变数据库/数据库而没有任何问题。 但是,如果我想将相同的值显示给用户,则它不显示任何内容,甚至不显示“0”。 所以我的问题是:如何将值格式化为“浮点数”,将其转换为“字符串”,并将其应用于Textbox.Text,以便显示值? 举个例子:如果我将文本框中的值设置为“5”,它将保存并显示“5”,但是如果我放“5.5”或“5,5”,无论哪种方式,它都不会显示它,而我需要它显示“5.5”。 有任何想法吗? PS:它应该代表货币价值。 如果可能的话,我也希望有一个不需要Javascript的解决方案。

ModelMetaData:如何获得“父” – 元数据?

在我看来,我调用Html.EditFor()来触发此数据类型的自定义编辑器模板。 另外我传递了一些元数据(这是我不喜欢的部分): Model.Title, new { metaData = metaTitle })%> 传递的类型(属性Title)的类型为“Translation”。 在自定义编辑器模板中,我必须从viewData读取传递的元数据才能使用它: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl” %> // {…} if (ViewData[“metaData”] != null) metaData = (ModelMetadata)ViewData[“metaData”]; 有没有什么方法可以直接在自定义编辑器模板中访问元数据? 不幸的是,如果我在编辑器模板中调用以下内容,我将不会获得相同的元数据对象(例如,如果缺少Title-Property的信息,则会丢失): ModelMetadata metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Model.GetType()); 我想避免在每次调用时传递元数据对象… 任何tipps的Thx! sl3dg3

为什么String GetHashCode只处理每四个字符?

我一直在阅读这篇文章,因为它是由Jon Skeet在这个答案上联系起来的。 我试图真正理解哈希是如何工作的,以及为什么乔恩喜欢他提供的算法。 我还没有声称对此有答案,但我确实有一个关于GetHashCode的基本System.String实现的具体问题。 考虑代码,重点是注释<<<<<==========行: public override unsafe int GetHashCode() { if (HashHelpers.s_UseRandomizedStringHashing) return string.InternalMarvin32HashString(this, this.Length, 0L); fixed (char* chPtr = this) { int num1 = 352654597; int num2 = num1; int* numPtr = (int*) chPtr; int length = this.Length; while (length > 2) { num1 = (num1 <> 27) ^ *numPtr; num2 = (num2 […]

将嵌套集合发布到Web API

我正在尝试将复杂类型的对象发布到web api。 在web api端,当方法接收到object参数时,除了从ICollection派生的集合之外,每个属性都被正确设置。 这是我的示例类: public class MyClass { private int id; public int Id { get { return id; } set { id = value; } } private MyCollection collection; public MyCollection Collection { get { return collection; } set { collection = value; } } } public class MyCollection : ICollection { public […]

UWP无法在自定义控件中分配属性错误

我有一个自定义控件LineChart 。 xaml.cs中的代码: public static readonly DependencyProperty StrokeProperty = DependencyProperty.Register(“StrokeProperty”, typeof(Brush), typeof(LineChart), new PropertyMetadata(new SolidColorBrush(), new PropertyChangedCallback(OnItemsChanged))); public Brush Stroke { get { return (Brush)GetValue(StrokeProperty); } set { SetValue(StrokeProperty, value); } } 在视图模型类中: public Brush Abc { get { return new SolidColorBrush(new Color() {A = 123, B = 123, G = 23, R = 12 […]

如何从TextBox中删除重复项?

我有一个文本框,每个项目都在一个新行上。 我试图从这个textBox中删除重复项。 我什么都想不到。 我尝试将每个项目添加到数组并删除重复项,但它不起作用。 还有其他选择吗?