问题列表 - 第40240页

Linq记忆问题

因为我对linq很新,所以我想在下面的例子中询问我的理解是否正确.

让我们假设我有非常大的动物名称集(100k记录),我想提交它们并以非常耗时的方法处理过滤的项目(2周).方法RunWithLinq()RunWithoutLinq()做法完全一样.

这是真的,使用第一种方法原始(大)集合将在离开方法后留在内存中,并且不会被触及GC,而使用无linq方法,集合将被删除GC

我会感激一点解释.

class AnimalProcessor
{
    private IEnumerable<string> animalsToProcess;
    internal AnimalProcessor(IEnumerable<string> animalsToProcess)
    {
        this.animalsToProcess = animalsToProcess;
    }
    internal void Start()
    {
        //do sth for 2 weeks with the collection
    }
}
class Program
{
    static void RunWithLinq()
    {
        var animals = new string[] { "cow", "rabbit", "newt", "ram" };
        var filtered = from animal in animals
                       where animal.StartsWith("ra")
                       select animal;
        AnimalProcessor ap = new AnimalProcessor(filtered);
        ap.Start();
    }
    static void RunWithoutLinq()
    { …
Run Code Online (Sandbox Code Playgroud)

c# linq memory-management

8
推荐指数
1
解决办法
3752
查看次数

有没有办法去禁用禁用的按钮上的图像去饱和?

有没有办法可以在禁用的按钮中对图像进行去饱和处理?例如.ICommand.CanExecute = false?或者我需要使用单独的图像+样式/触发器

wpf triggers styles icommand

3
推荐指数
2
解决办法
1219
查看次数

一对列表中的最小对列表

给定两个整数列表,生成最短的对列表,其中两个列表中的每个值都存在.每对中的第一个必须是第一个列表中的值,每对中的第二个必须是第二个列表中的值.每对中的第一个必须小于该对中的第二个.

zip如果列表长度不同,或者每个列表中的同一位置存在相同的整数,则简单将无效.

def gen_min_pairs(uplist, downlist):
    for pair in zip(uplist, downlist):
        yield pair
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以提出以下建议:

def gen_min_pairs(uplist, downlist):
    up_gen = iter(uplist)
    down_gen = iter(downlist)

    last_up = None
    last_down = None

    while True:
        next_out = next(up_gen, last_up)
        next_down = next(down_gen, last_down)

        if (next_up == last_up and
            next_down == last_down):
            return

        while not next_up < next_down:
            next_down = next(down_gen, None)
            if next_down is None:
                return
        yield next_up, next_down

        last_up = next_up
        last_down = next_down
Run Code Online (Sandbox Code Playgroud)

这是一个简单的测试程序:

if __name__ == '__main__':
    from pprint import pprint …
Run Code Online (Sandbox Code Playgroud)

python algorithm

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

发送 HL7 消息后何时关闭和重新打开套接字

我正在尝试打开一个到 HL7 服务器的基本连接,在那里我发送请求并获得 ACK 响应。这将持续进行。

  1. 如果这是连续进行的,我什么时候关闭套接字?在这种情况下,我是否正确实现了这一点?
  2. 如果我关闭套接字,如何再次打开它?ConnectionHub 的 javadocs 指出以下内容:
attach(java.lang.String host, int port, Parser parser, 
       java.lang.Class<? extends LowerLayerProtocol> llpClass) 
Run Code Online (Sandbox Code Playgroud)

返回到给定地址的连接,如有必要,打开此连接。

但是,在现实生活中,如果它已经关闭,它不会打开新的连接。

Patient patient = appt.getPatient();
Parser parser = new GenericParser();
Message hl7msg = parser.parse(wlp.getORMString(appt));

//Connect to listening servers
ConnectionHub connectionHub = ConnectionHub.getInstance();
// A connection object represents a socket attached to an HL7 server
Connection connection = connectionHub.attach(serverIP, serverPort, 
                            new PipeParser(), MinLowerLayerProtocol.class);
if (!connection.isOpen()) {
   System.out.println("CONNNECTION is CLOSED");
   connection = connectionHub.attach(serverIP, serverPort, new PipeParser(),         
                                     MinLowerLayerProtocol.class);
  if (!connection.isOpen()) {
    System.out.println("CONNNECTION …
Run Code Online (Sandbox Code Playgroud)

java sockets hl7

3
推荐指数
1
解决办法
3170
查看次数

从矢量中删除指针

我正在尝试擦除指向对象的指针,但是我一直在崩溃控制台(PS2),由于控制台的设置方式我没有出现任何错误,所以我不太确定发生了什么.

我列出了两行错误,直到我添加这些行才出错.

    for(listIter = m_downDirectionList.begin(); listIter != m_downDirectionList.end(); listIter++)
    {
        Projectile* proj = dynamic_cast<Projectile*>(*listIter);

        if (proj->getZWorldCoord() >= (defaultLevelDepth + zOffset))
        {
            proj->getPoolOwner()->releaseAProjectile(proj);
            //(*listIter) = NULL; // THIS ERRORS, also tried = 0.
            //listIter = m_downDirectionList.erase(listIter); // THIS ALSO ERRORS
        }

        else
        {
            (*listIter)->update(camera, zOffset);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢.

编辑:澄清,只是有这条线.

listIter = m_downDirectionList.erase(listIter);
Run Code Online (Sandbox Code Playgroud)

这也是错误.

c++ iterator vector

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

为什么eval在这里失败?

0001: response
$[0] = [string] "{\"code\":200,\"id\":121}"
0001: eval(response)
SyntaxError: invalid label
Run Code Online (Sandbox Code Playgroud)

有谁知道?

javascript eval

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

为什么Arrays.sort是快速排序算法,为什么不是另一种排序算法呢?

为什么?它更快还是更有效?

对于具有一个核心的系统,我们可以使用quicksort.我们应该在具有两个内核,四个内核或八个内核的系统上使用什么?

java algorithm

19
推荐指数
4
解决办法
3万
查看次数

从C#调用Windows API函数时,要签名的信任源是:.NET Framework源代码还是PInvoke?

例如,这是来自.NET Framework源文件UnsafeNativeMethods.cs:

[DllImport(ExternDll.User32, ExactSpelling=true, CharSet=CharSet.Auto)] 
public static extern bool GetWindowRect(HandleRef hWnd, 
    [In, Out] ref NativeMethods.RECT rect);
Run Code Online (Sandbox Code Playgroud)

这来自PInvoke.Net:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(HandleRef hwnd, out RECT lpRect);
Run Code Online (Sandbox Code Playgroud)
  1. 哪个是此功能的正确/最佳签名?(只有其中一个有[return: MarshalAs(UnmanagedType.Bool)],或[In, Out] ref等)

  2. 我注意到在.NET Framework源文件中有很多/大多数签名都有ExactSpelling=true, CharSet=CharSet.Auto,但是在PInvoke上他们没有.这需要吗?

c# pinvoke winapi interop signatures

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

用于绘制图形和滚动的c#面板

我希望能够使用面板或类似工具将图形绘制到Winform上.如果图形变得比控件大,我似乎无法看到有关添加滚动条的任何内容?

是否可以使用面板执行此操作,或者是否存在允许它的类似控件?

谢谢.

c# panel winforms

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

预处理器定义

相当直截了当的问题,是否可以编写C#预处理器指令,以便我可以执行以下操作?:

ClassZ<A, B, C, D, E, F>
Run Code Online (Sandbox Code Playgroud)

ClassZ<T>
Run Code Online (Sandbox Code Playgroud)

哪里

T = <A, B, C, D, E, F>
Run Code Online (Sandbox Code Playgroud)

c# generics c-preprocessor

0
推荐指数
1
解决办法
323
查看次数