Tag: c#

如何避免实时.NET应用程序中的垃圾收集?

我正在编写一个金融C#应用程序,它从网络接收消息,根据消息类型将它们转换为不同的对象,最后将应用程序业务逻辑应用于它们。 关键是在应用业务逻辑之后,我非常确定我将永远不再需要这个实例。 我不想等待垃圾收集器释放它们,而是明确地“删除”它们。 有没有更好的方法在C#中这样做,我应该使用一个对象池来重用总是同一组实例,还是有更好的策略。 目标是避免垃圾收集在时间关键过程中使用任何CPU。

重新投掷参数少捕获和没有做任何事情之间的区别?

假设我在两个不同的程序集中有以下两个类: //in assembly A public class TypeA { // Constructor omitted public void MethodA { try { //do something } catch { throw; } } } //in assembly B public class TypeB { public void MethodB { try { TypeA a = new TypeA(); a.MethodA(); } catch (Exception e) //Handle exception } } } 在这种情况下,MethodA中的try-catch只是提升exception,但并没有真正处理它。 […]

无法使用斯堪的纳维亚字符向地址发送电子邮件

使用SmtpClient , MailMessage和MailAddress类,我无法发送到电子邮件地址,例如åbc.def@domain.se。 我得到错误/exception,如下所示: 邮件标题中找到了无效字符:’å’。 —————————发送邮件时出错——————– ——- System.Net.Mail.SmtpException:客户端或服务器仅配置为具有ASCII本地部分的电子邮件地址:åbc.def@domain.se。 在System.Net.Mail.MailAddress.GetUser(Boolean allowUnicode) 在System.Net.Mail.MailAddress.GetAddress(布尔allowUnicode) 在System.Net.Mail.MailAddress.Encode(Int32 charsConsumed,Boolean allowUnicode) System.Net.Mail.Mail.Message.Send上的System.Net.Mail.MailAddressCollection.Encode(Int32 charsConsumed,Boolean allowUnicode)处于System.Net.Mail.Message.PrepareHeaders(Boolean sendEnvelope,Boolean allowUnicode)处(BaseWriter writer,Boolean sendEnvelope) ,System.Net.Mail.SmtpClient.Send(MailMessage消息)中的布尔值allowUnicode) 我的主题/正文中的这些字符很好,但不在电子邮件地址中。 我已经尝试过设置SmtpClient.DeliveryMethod = SmtpDeliveryFormat.International ,或者MailMessage.HeadersEncoding = Encoding.Unicode (或UTF8 ),它似乎没有改变任何东西。 这些是我们需要与之沟通的人的真实电子邮件地址,因此这有点问题。 我一直在挖掘.Net源代码,但没有真正得到任何地方。 我追踪了一个ServerSupportsEai属性,谷歌告诉我EAI代表电子邮件地址国际化( https://tools.ietf.org/html/rfc5336 ),但是我的代码或者特定服务器是否有限制还不太清楚我正在谈论只是不支持这个……因为我正在使用测试服务器来避免向毫无戒心的瑞典人发送电子邮件! 有人可以帮助我清除这一点 – .Net是否支持这一点,如果是这样,如果我的客户端代码应该做什么来启用它呢?

如何为webBrowser导航事件设置超时

如何为webBrowser导航(url)事件设置超时 c #netframework 4.0

当与ConcurrentDictionary 一起使用时,C#LINQ OrderBy线程是否安全?

我的工作假设是,当与System.Collections.Concurrent集合(包括ConcurrentDictionary )一起使用时,LINQ是线程安全的。 (其他Overflowpost似乎同意: 链接 ) 但是,对LINQ OrderBy扩展方法的实现的检查表明,对于实现ICollection的并发集合的子集(例如ConcurrentDictionary ),它似乎不是线程安全的。 OrderedEnumerable GetEnumerator ( 此处为source )构造一个Buffer结构的实例( 此处为source ),它尝试将集合转换为ICollection ( ConcurrentDictionary实现),然后执行一个collection.CopyTo,其数组初始化为集合的大小。 因此,如果在OrderBy操作期间ConcurrentDictionary (在这种情况下为具体ICollection )的大小增加,在初始化数组和复制到它之间,此操作将抛出。 以下测试代码显示此exception: (注意:我很欣赏在一个线程安全的集合上执行一个OrderBy ,这个集合在你下面发生变化并没有那么有意义,但我不认为它应该抛出) using System; using System.Collections.Concurrent; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Program { class Program { static void Main(string[] args) { try { int loop = 0; while (true) //Run many loops […]

如何检查我的Windows服务器是虚拟机还是物理机

我正在将桌面远程连接到我们的实验室/数据中心的Windows服务器。 我需要以编程方式弄清楚我们所有的服务器都是虚拟机或物理服务器,当然我们有环境表告诉我们哪个是哪个。 但我需要编写代码来区分它。 我需要使用什么技术? 我没有找到.Net程序集来做到这一点。 寻找专家分享您的知识或指导,任何研究方向或链接,任何事情将不胜感激!

SignalR – 检查用户是否仍然连接

我有一个方法集线器,称为客户端。 此方法启动一个带有委托的计时器,该委托每10秒运行一次。 由于如果没有人连接到集线器,继续运行此委托是没有意义的,我想在重新计划之前检查是否有任何用户仍然从委托内部连接。 有没有办法做到这一点?

枚举在C#和foreach

可能重复: C#:如何枚举枚举? 大家好, 我有一个Enum public enum AttributeType { TextField = 1, TextArea = 2, Date = 4, Boolean = 8 } 我想要预先知道这个枚举,并以这种格式创建一个对象数组 object data = new object[] { // new object[] { 1,”TextField”} new object[] { enumValue, enumText} };

FIPSvalidation密码算法的问题

我在Windows XP Pro版本2002 SP 3下运行带有.NET 3.5 SP 1的Visual Studio 2008版本9.0.30729.1 SP,带有Intel Core 2 Duo E8400 3 GHz处理器。 我正在开发一个使用Microsoft Patterns&Practices组的复合应用程序库(CAL)的C#WPF应用程序。 我在XAML中收到以下compliation错误: “MC1000:此实现不是Windows平台FIPSvalidation的加密算法的一部分。” 我找到了一个应该在Microsoft知识库aritcle 935434中修复此问题的修补程序。但是,此修补程序的安装程序报告以下错误: “Windows Installer服务无法安装升级修补程序,因为要升级的程序可能会丢失,或者升级修补程序可能会更新程序的其他版本。请确认您的计算机上存在要升级的程序,并且您有正确的升级补丁。“ 此修补程序的页面列出了.NET 3.0作为先决条件。 虽然我正在使用.Net 3.5,但我的机器也安装了.NET 3.0。 因此,我希望安装此修补程序。 我希望即使这个修补程序是针对.NET 3.0的,它仍然可以解决我的问题。 无论如何,我无法安装此修补程序。 有没有人有任何关于我如何能够通过“这个实现不是…的一部分”的编译错误的替代建议? 谢谢,戴夫

如何使用reflection调用通用异步方法

public interface IBar { } public class Bar : IBar { } public class Bar2 : IBar { } public interface IFoo { Task Get(T o) where T : IBar; } public class Foo : IFoo { public async Task Get(T o) where T : IBar { … } } 然后我可以使用reflection调用此方法: var method = typeof(IFoo).GetMethod(nameof(IFoo.Get)); […]