Tag: .net 4.0

c#锁定并听取CancellationToken

我想使用锁或类似的同步来保护关键部分。 同时我想听一个CancellationToken。 现在我正在使用这样的互斥锁,但是互斥锁并没有那么好的性能。 我可以使用任何其他同步类(包括新的.Net 4.0)而不是互斥锁吗? WaitHandle.WaitAny(new[] { CancelToken.WaitHandle, _mutex}); CancelToken.ThrowIfCancellationRequested();

第一次调用.net webservice很慢

我在我的.net winforms应用程序中调用.net webservice,两者都在框架4.0中。 在程序执行期间,webservice第一次调用方法时,调用大约需要10-12秒。 后续通话需要约1-2秒。 即使重新创建Web引用实例,后续调用仍然是〜1-2秒。 当winforms应用程序重新启动时,第一次呼叫延迟再次发生,但后续呼叫响应。 Web调用的实例是在调用发生之前创建的,并不是延迟的一部分。 正在生成winforms应用程序的XmlSerializers(并据我所知使用,但我不知道如何validation这一点)。 由于Web服务端的首次编译,因此不会发生延迟。 这是一整天都在使用的生产Web服务,其apppool仍保留在内存中。 据我所见,延迟发生在客户端,或者客户端和服务器之间的第一次调用,而不是后续调用。 不知道接下来要检查什么。 有任何想法吗?

如何设置内联集合?

例如: DataTable table = new DataTable() { Columns = new DataColumnCollection( { new DataColumn(“col1”), new DataColumn(“col2”) }) });

entity framework5 – 基于枚举的派生类的判别器

我有以下内容(为了清楚起见,缩写) – 一个枚举,一个带有该枚举的基类,以及两个将枚举设置为特定值的派生类。 public enum MyEnum { Value1, Value2 } public class MyBaseClass { public MyEnum { get; protected set; } } public class DerivedOne: MyBaseClass { public DerivedOne { MyEnum = MyEnum.Value1; } } public class DerivedTwo: MyBaseClass { public DerivedTwo { MyEnum = MyEnum.Value2; } } 我想要做的是让Entity Framework 5自动区分DerivedOne和DerivedTwo, 并使用基于MyEnum值的鉴别器 。 我应该能够这样做,按照惯例,每个MyEnum == […]

“配置系统无法初始化”的App.Config错误

我有一个用C#编写的控制台应用程序.net 4.0它有一堆变量,我想进入App.Config(所以它将在一个地方)。 将此部分代码添加到App.Config(配置标记之间): 在我的程序中尝试使用此代码进行测试 Console.WriteLine(ConfigurationManager.AppSettings[“RemoteDirectory”]); 但我不断收到“配置系统初始化失败”的错误。

File.ReadLines何时释放资源

在使用C#中的文件时,我习惯于考虑释放相关资源。 通常这是一个using语句,除非它是像File.ReadAllLines这样的单行内容方法,它将为我打开和关闭文件。 .Net 4.0引入了方便的File.ReadLines方法。 这将返回一个IEnumerable,并被视为一种更有效的方式来处理文件 – 它避免将整个文件存储在内存中。 为此,我假设枚举器中有一些延迟执行逻辑。 显然,因为这个方法返回一个IEnumerable,而不是IDisposable,我不能用我对使用语句的直觉反应。 我的问题是:考虑到这一点,使用此方法是否存在资源释放的问题? 调用此方法是否意味着关联文件锁的释放是不确定的?

entity framework:在关联中使用非主要唯一键的替代解决方案

我知道entity framework工作不允许您使用非主要唯一密钥作为外键关联从数据库生成模型。 我可以手动修改EDMX吗? 如果是这样,有人能为我提供一个例子或参考吗? 如果没有,还有其他可能吗? 最简单的例子: 这是表格的DDL。 你会注意到我有一个从PersonType.TypeCode到Person.TypeCode的外键 CREATE TABLE [dbo].[PersonType]( [PersonTypeId] [int] NOT NULL, [TypeCode] [varchar](10) NOT NULL, [TypeDesc] [varchar](max) NULL, CONSTRAINT [PK_PersonType] PRIMARY KEY CLUSTERED ([PersonTypeId] ASC) CONSTRAINT [UK_PersonType] UNIQUE NONCLUSTERED ([TypeCode] ASC) ) CREATE TABLE [dbo].[Person]( [PersonId] [int] NOT NULL, [TypeCode] [varchar](10) NOT NULL, CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC) ) […]

Ria Services将复杂对象作为参数传递给查询域服务方法

我遇到了与此线程中指定的问题类似的WCF RIA服务的一些困难。 我正在创建的域服务方法(Query方法)应该采用复杂的对象参数。 示例域服务方法: public ComplexObjectResult GetComplexObject(ComplexObjectParameter test) { //do stuff } 参数对象: public class ComplexObjectParameter { [Key] public decimal ID { get; set; } … other fields } 我得到此编译错误: 错误70域操作条目’GetComplexObject’的参数’test’必须是预定义的可序列化类型之一 。 在网上搜索了一下后,我发现了这个msdn线程 。 它声明这是RIA服务的限制,并且该线程没有指定任何体面的解决方法。 现在似乎有一些肮脏的解决方法: 更改复杂参数以键入字符串和序列化/反序列化参数对象我自己,我发现一个非常hacky解决方案。 在域服务方法上使用[Invoke]标签并放弃所有RIA跟踪function,我首先使用RIA。 是否有替代方案可以提供缺点较少的上述解决方案? 是否有人为此问题找到了更优雅的解决方法? 谢谢

如何从自己的类调用扩展方法而不进行强制转换?

我试图在我自己的类上调用扩展方法 ,但它无法编译。 考虑以下代码行: public interface IHelloWorld { } public static class Extensions { public static string HelloWorld(this IHelloWorld ext) { return “Hello world!”; } } public class Test : IHelloWorld { public string SaySomething() { return HelloWorld(); } } 基本上我正在扩展界面。 我一直收到这个错误: The name ‘HelloWorld’ does not exist in the current context 有人可以向我解释一下吗? 当我做一个演员表似乎很好: return ((Test)this).HelloWorld(); […]

如何清空BlockingCollection

我有一个线程添加到BlockingCollection项目。 在另一个线程上我使用foreach (var item in myCollection.GetConsumingEnumerable()) 如果有问题,我想打破我的foreach和我的方法并清除BlockingCollection中剩下的任何东西但是我找不到办法去做。 有任何想法吗?