小编Bob*_*Bob的帖子

.Net 4.0 Tasks是否应该是多线程应用程序的首选方法?

我正在阅读任务并行库,文章说:

在.NET Framework 4中,任务是编写多线程,异步和并行代码的首选API

但它也表示他们在幕后使用ThreadPool.我难以弄清楚的是,如果只在你使用ThreadPool时使用Tasks(因此"Thread vs. Task"等同于"Thread与ThreadPool"相同),或者Microsoft是否打算使用Tasks需要多个线程的任何地方,没有"Thread与ThreadPool"困境所固有的考虑因素.

那么,应该在需要多个线程的任何地方使用任务吗?

.net multithreading threadpool task-parallel-library

6
推荐指数
1
解决办法
298
查看次数

ASP.NET bin目录中的Oracle oci.dll无法删除/不起作用

我按照这里的指示:http://splinter.com.au/blog/?p = 156试图在不安装Oracle 11g客户端的情况下使用更新版本的ODP.NET.到目前为止,除了重启IIS之外,我都遵循了一切.

然而,这引起了一些问题,我真的很好奇为什么.如果我尝试使用ODP.NET,我遇到了Oracle连接尝试连接时抛出的空白异常(例如ConnectExample.Open()).

但最奇怪的是:我无法删除oci.dll.它说它正在使用中.什么可以使用这个DLL?ASP.NET在Bin目录中使用本机dll时究竟做了什么?我想也许这是涉及oci.dll的东西,但如果我在桌面WinForm应用程序中以类似的方式使用dll,那么oci.dll不会被锁定,我可以自由删除它.

此外,我尝试使用它后,正常的System.Data.OracleClient停止工作.它现在抛出OCIEnvCreate以-1返回的异常.

我将尝试重新启动IIS,并希望这将解决此问题,但我想知道这里发生了什么(如果它可以在不重新启动IIS的情况下解决).有没有人有想法?

编辑:我尝试重新启动IIS,但没有解决问题

编辑#2:我认为我没有很好地提出这个问题,但那是因为我假设重新启动IIS会起作用.现在我只需要知道它为什么不起作用.在谷歌搜索类似的问题我只遇到2个论坛帖子,告诉我确切的问题:Oracle ODP.NET在尝试连接时返回一个空白异常.这是以下链接:

http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296

http://forums.oracle.com/forums/thread.jspa?threadID=549864

上面的韩文链接是最有趣的.他们有一个完整的安装,让我怀疑我的问题不是文件或丢失的文件.我想知道他们的意思是"生产服务器抛出空白异常如果在建立ODP之前调用OCI DLL"?

编辑/更新#3:我们的部门有一个内部网服务器,我今天可以测试.我将所需的dll添加到Bin文件夹中,一切正常,无需重新启动IIS.我不问.我将在此服务器上尝试更多测试,看看我是否可以复制问题

编辑#4(奥德赛继续):我确定oraocci11.dll(C++调用接口DLL)最初需要ASP.NET(或ODP.NET库)才能找到11g客户端dll,之后就是oraocci11.dll似乎永远不会再次使用,可以删除.不确定这对我的问题意味着什么,但由于它增加了知识库,我想我会提到它

编辑#5:我将mfc71.dll和msvcr71.dll,2个处理C/MFC的Windows系统文件添加到Bin目录,因为我发现它们是ODP.NET所需要的(或者至少是客户端需要的).这至少使得旧的熟悉的"客户端不兼容"错误.我删除了这两个DLL,确定它回到了上面给出的相同错误.然而,添加它们不会使这些错误消失,所以我将不得不重新重置IIS.

asp.net dll odp.net

5
推荐指数
1
解决办法
5813
查看次数

在C#中lambda表达式/委托是"纯粹的",还是可以?

最近询问了没有副作用的功能程序,并了解了这对于使并行化任务变得微不足道的意义.具体而言,"纯粹"功能使这一点变得微不足道,因为它们没有副作用.

我最近也在研究LINQ和lambda表达式,因为我在StackOverflow上涉及枚举的例子很多次.这让我想知道如果在C#中并行枚举或循环可以"更容易".

lambda表达式"纯粹"是否足以实现平凡的并行化?也许这取决于你在表达中做了什么,但它们能够足够纯粹吗?这样的事情在C#中理论上是可行的/微不足道的吗?:

  • 将循环分解成块
  • 运行一个线程循环遍历每个块
  • 运行一个函数,该函数使用每个线程的当前循环位置的值执行某些操作

例如,假设我在游戏循环中有一堆对象(因为我正在开发一个游戏并且正在考虑多线程的可能性)并且必须每帧都对它们做一些事情,上面的内容是否会微不足道关闭?看看IEnumerable似乎它只跟踪当前位置,所以我不确定我是否可以使用普通的泛型集合来将枚举分解为"块".

抱歉,这个问题.我使用上面的子弹而不是伪代码,因为我甚至不知道如何编写伪代码.我的.NET知识纯粹是简单的业务,我是代表和线程等的新手.我主要想知道上述方法是否适合追求,如果代理人/ lambdas不必担心何时它涉及到它们的并行化.

.net c# lambda functional-programming

5
推荐指数
2
解决办法
1034
查看次数

C#:为什么这个变量在范围内并且同时超出范围?

可能重复:
C#变量范围

我遇到过以前从未遇到的事情.因为我知道如何解决它,所以我不是在寻找解决方案.我想知道的是编译器正在做什么.这只是示例代码:

if (true)
{
    int x = 0;
}
int x = 0;
Run Code Online (Sandbox Code Playgroud)

该代码产生错误"无法在此范围内声明局部变量'x',因为它会给'x'赋予不同的含义".

但是,我将代码更改为:

if (true)
{
    int x = 0;
}
x = 0;
Run Code Online (Sandbox Code Playgroud)

我收到错误"无法解析符号'x'".

那么,这里发生了什么?x是如何在范围内和超出范围?

c# scope

4
推荐指数
1
解决办法
639
查看次数