小编Chr*_*ber的帖子

PLinq本质上比System.Threading.Tasks.Parallel.ForEach更快

简介:我从System.Threading.Tasks.Parallel.ForEach和Concurrent Data结构更改为简单的plinq(Parallel Linq)查询.加速是惊人的.

那么plinq固有地比Parallel.ForEach快吗?或者它是否特定于任务.

// Original Code
// concurrent dictionary to store results
var resultDict = new ConcurrentDictionary<string, MyResultType>();

Parallel.ForEach(items, item =>
        {
            resultDict.TryAdd(item.Name, PerformWork(source));
        });


// new code

var results =
            items
            .AsParallel()
            .Select(item => new { item.Name, queryResult = PerformWork(item) })
            .ToDictionary(kv => kv.SourceName, kv => kv.queryResult);
Run Code Online (Sandbox Code Playgroud)

注意:每个任务(PerformWork)现在运行0到200毫秒.在我优化它之前,它需要更长的时间.这就是我在第一时间使用Tasks.Parallel库的原因.所以我从总时间的2秒到大约100-200毫秒的总时间,执行大致相同的工作,只是使用不同的方法.(哇linq和plinq太棒了!)

问题:

  1. 是否因为使用plinq vs Parallel.ForEach而加速?
  2. 它只是简单地删除并发数据结构(ConcurrentDictionary)?(因为它不需要同步线程).
  3. 根据这个相关问题的答案

PLINQ主要基于功能风格的编程而没有副作用,而副作用正是TPL的用途.如果你想实际并行工作而不是仅仅并行搜索/选择事物,你可以使用TPL.

我可以假设,因为我的模式基本上是功能性的(给输入产生没有突变的新输出),plinq是正确使用的技术吗?

我正在寻找验证我的假设是正确的,或者表明我错过了什么.

c# linq concurrency plinq task-parallel-library

7
推荐指数
1
解决办法
3456
查看次数

如何在.Net中调整(缩小)EMF(元文件)?

我有一个EMF文件.我想把它缩小一点.

如何在.net(或使用任何工具)中执行此操作而不会出现模糊图像

生成的已调整大小的图像将转换为另一种格式(png/jpg /无论如何),我可以处理(我认为).

我还没有在.Net(或任何语言平台)中找到一个处理emf/metafiles的明确例子.

用GDI +查看了图形编程,但它只介绍了Metafiles.

我已经尝试了Image Magick,但你必须转换为另一种格式(我还需要做),结果很模糊(例如缩小并转换为png).

我已经尝试过Inkscape,但是你只能导入一个EMF文件而Inkscape将它倒置 并且不成比例地导入到现有的绘图中.

另外,(不要笑)我已经在Window's Paint中打开了它(为数不多的将打开emf的图像编辑软件程序之一)并调整了绘图大小,再次模糊.

更新:这是我用来调整大小的代码.

这样可行,但生成的图像模糊不清.代码只是一个通用的图像重新调整例程,不是特定于EMF的

private static Image resizeImage(Image imgToResize, Size size)
{
    int sourceWidth = imgToResize.Width;
    int sourceHeight = imgToResize.Height;

    float nPercent = 0;
    float nPercentW = 0;
    float nPercentH = 0;

    nPercentW = ((float)size.Width / (float)sourceWidth);
    nPercentH = ((float)size.Height / (float)sourceHeight);

    if (nPercentH < nPercentW)
        nPercent = nPercentH;
    else
        nPercent = nPercentW;

    int destWidth = (int)(sourceWidth * nPercent);
    int destHeight = …
Run Code Online (Sandbox Code Playgroud)

.net c# drawing image

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

使用任何CPU集编译C#应用程序可以处理大(> 2GB)地址

我在性能测试期间遇到了这个问题.

使用x86平台标志编译C#控制台应用程序时,未设置Large Address Aware标志:

dumpbin/headers app.exe的输出:

Dump of file app.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               3 number of sections
        569F0089 time date stamp Tue Jan 19 21:35:37 2016
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             102 characteristics
                   Executable
                   32 bit word machine
Run Code Online (Sandbox Code Playgroud)

将标志设置为"Any Cpu"时,生成的exe是Large Address Aware:

Dump of file app.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               3 …
Run Code Online (Sandbox Code Playgroud)

c# memory visual-studio visual-studio-2015

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

ClojureBox教程

我正在努力学习clojure.ClojureBox似乎与LispBox类似 - 我以前使用的http://gigamonkeys.com/lispbox/.

我正在寻找一个关于使用emacs的特定clojure特定教程,因为它配置了clojurebox.

以下是我的一些具体问题:

  • 如何在emacs中创建新的clojure文件
  • 加载现有的clojure文件,以便REPL可以使用表单(值,函数)
  • 什么是好的项目结构?如果我有多个文件,那么最好的方法是什么
  • 请问编程Clojure的HTTP://pragprog.com/titles/shcloj/programming-clojure回答这些问题?
  • 有没有比clojurebox更好的环境?我已经尝试过对netbeans的攻击并且它目前已经坏了(不会正确创建项目).Netbeans 6.7.1和enclojure 2009-08-25-发布.

emacs netbeans clojure

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

是否有相当于 SQL Server 的应用程序名称连接字符串参数的 Oracle?

连接到 Sql Server 时,您可以在连接字符串中包含“应用程序”或“应用程序名称”。这使得跟踪共享用户名/密码的应用程序变得非常容易。

一个很好的用途是 Sql Server Profiler。您可以按应用程序过滤。这在过去对我们很有帮助。

但是,我无法为 Oracle 找到类似的东西。

在 Oracle 中是否有等效于 SQL Server 的“应用程序名称”连接字符串参数?

如果相关,我们正在使用 Oracle 提供的 .NET 驱动程序(显然通过 .NET/C# 连接)。

Microsoft 连接字符串关键字

连接到 SQL Server 时使用应用程序名称参数

database oracle connection-string

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

Visual Studio 2012无法找到模板

在Visual Studio 2012 RC上安装Visual Studio 2012 RTM并创建新的ASP.Net空Web应用程序项目后,我无法将新的Web窗体添加到我的项目中.尝试添加新的Web窗体时,我收到错误消息:

找不到路径的一部分....\WebForm.zip\WebForm.vstemplate

此问题在此处的连接站点上列出:

https://connect.microsoft.com/VisualStudio/feedback/details/758581/could-not-find-itemtemplate-path

我不能在那里注册解决方法,所以我打算在这里做,所以希望其他人可以找到它.(任何人都知道为什么d @mnded寄存器链接不起作用?)

更新:我还必须为类模板执行此操作:(我的路径)

 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\ide\ItemTemplatesCache\web\csharp\1033\Class
Copied the Class folder and renamed it Class.zip
Run Code Online (Sandbox Code Playgroud)

.

c# asp.net visual-studio-2012

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

如何在没有内存分配的情况下将字符串与char []进行比较?

在这个例子中,我必须将数组转换为字符串以使用内置的String.Compare方法.

char[] array = {'a','b','c'};
string s = "abc";

// here is the extra string allocation
var arrayString = new String(array);

var compareResult = String.Compare(s, arrayString);
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以将字符串与char数组进行比较而无需额外的字符串分配?

注意:我需要比较语义,我需要"[a] 32位有符号整数,表示两个比较之间的词汇关系."

小于零 - > strA小于strB.

零 - > strA等于strB.

大于零 - > strA大于strB.

(我在循环中进行这种比较,并且我使用额外的字符串分配生成了大量额外的垃圾(基于输入的大小为25-100MB)_.

我想我最终可能会弄脏自己,只是自己编写代码.

.net c#

2
推荐指数
1
解决办法
572
查看次数

Process.WorkingSet64 返回最大值 4294967295

我正在尝试使用 C# 监视另一个进程的内存。但是,Process.WorkingSet64 或 Process.PrivateMemorySize64 将输出的最大内存值为 4294967295。性能计数器也有同样的问题。

这是我的代码:

using System;
using System.Diagnostics;

namespace perfmon
{
    class Program
    {
        static void Main(string[] args)
        {
            int pid;
            if (int.TryParse(args[0], out pid))
            {
                var p = Process.GetProcessById(pid);

                var ramCounter = new PerformanceCounter("Process", "Working Set", p.ProcessName);
                Console.WriteLine($"ProcessName:{p.ProcessName}");

                var ram = ramCounter.NextValue();
                p.Refresh();

                Console.WriteLine("WorkingSet64\tPrivateMemorySize64\tRam PC");
                Console.WriteLine($"{p.WorkingSet64}\t{p.PrivateMemorySize64}\t\t{ram}");
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在带有 .net 4.61 的 Windows Server 2012 R2 上运行。

输出:

C:\XXX\perfmon>perfmon.exe 15800
ProcessName:XXX.Windows.Services
WorkingSet64    PrivateMemorySize64     Ram PC
4294967295      4294967295              4.294967E+09
Run Code Online (Sandbox Code Playgroud)

进程的 Powershell 输出: …

c# memory monitoring system.diagnostics process

2
推荐指数
1
解决办法
780
查看次数