小编Gui*_*ndi的帖子

CreateFileMapping,MapViewOfFile,如何避免占用系统内存

我正在开发一个针对桌面系统的应用程序,它可能只有256MB RAM(Windows 2000及更高版本).在我的应用程序中,我有这个大文件(> 256MB),其中包含大约160字节/每个的固定记录.这个应用程序有一个相当漫长的过程,随着时间的推移,它将随机访问大约90%的文件(用于读写).任何给定的记录写入距离读取该特定记录的记录访问量不会超过1,000(我可以调整此值).

我有两个明显的选择:常规I/O(FileRead,FileWrite)和内存映射(CreateFileMapping,MapViewOfFile).后者在具有足够内存的系统中应该更有效率,但在具有低内存的系统中,它将换掉大多数其他应用程序的内存,这在我的应用程序中是禁止的.有没有办法让这个过程不占用所有内存(例如,强制刷新我不再访问的内存页面)?如果这是不可能的,那么我必须回到常规I/O; 我本来希望在写入部分使用重叠I/O(因为访问是如此随机),但是文档说小于64K的写入总是同步提供.

欢迎任何改进I/O的想法.

windows performance file-io memory-management

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

既然ILogger<T>是单例,那么不同线程如何使用BeginScope()而不影响其他线程呢?

这与这个问题有关。上下文:.Net Core 3.1,使用Microsoft.Extensions.Logging

记录器是应用程序的IHost. 如果我将 (DI) an 注入ILogger<T>到我的类或方法中,则注入的对象与其他类或方法在请求ILogger<T>. 这就提出了当我在一个线程中使用时会发生什么的问题logger.BeginScope($"Processing {transactionId}")。其他线程会发生什么情况?他们也会改变日志记录范围吗?日志记录范围是否会混淆?如果他们不这样做:那是如何工作的,因为他们的记录器是同一个对象?如果它们混合作用域,我怎样才能使两个线程对给定ILogger<T>类型使用不同的日志记录作用域?

dependency-injection .net-core

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

神秘使用LOOKUP

我多年来一直在使用这个Excel公式.它工作正常,但我想了解它的工作原理!该公式用于查找列表中的最后一个关联值.例如:

宏用法示例.

C14中的公式: =LOOKUP(2,1/(B1:B12="meat"),C1:C12)

这里,公式在C14B列中查找最新"meat"标记的单元格,并返回C列中的关联值.报告认为"meat",在B9和相应的返回值C9.

公式中最令人费解的部分是"1/(....)".这个师是什么?这种语法来自哪里?可以在其他地方使用吗?为什么查找值2

excel excel-formula

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

Angular 行模板中的多个 &lt;tr&gt;

我知道了类似的问题,这是所有 网站,但我的问题是从那些稍有不同。

我想编写一个为行提供服务的组件,但每个实例可能会生成一行到多行,具体取决于提供的数据:

<tbody>
    <!-- intended usage -->
    <data-rows *ngFor="let row of dataRows" [row]="row">
    </data-rows>
</tbody>
Run Code Online (Sandbox Code Playgroud)

需要创建:

<tbody>

    <!-- from first <data-rows> instance -->
    <tr><td> instance 1, row 1 </td></tr>

    <!-- from second <data-rows> instance -->
    <tr><td> instance 2, row 1 </td></tr>
    <tr><td> instance 2, row 2 </td></tr>
    <tr><td> instance 2, row 3 </td></tr>

    <!-- from third <data-rows> instance -->
    <tr><td> instance 3, row 1 </td></tr>

</tbody>
Run Code Online (Sandbox Code Playgroud)

大多数解决方案建议使用属性选择器并在真正的 <tr> 上使用 *ngFor。这在我的情况下不起作用,因为实例和行之间没有一对一的关系。另外,父组件不知道应该渲染多少个<tr>;这是由 <data-rows> 决定的。

当然,一个简单的 <data-rows> 实现会失败,因为它会向 …

angular2-template angular

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

C++/CLI泛型,在数组<>和其他集合中使用T.

我正在用C++/CLI(VS2008)编写一个泛型类来存储和管理不同类型的记录,我需要集合来保存它们,然后再将它们刷新到DB/disk/etc. 我在考虑这样的事情:

ref class Record
{
    // ...
};

generic<typename T>
where T : Record, gcnew()
public ref class Factory
{
public:
    // ....functions....
protected:
    array<T^> ^    StoredData;
};
Run Code Online (Sandbox Code Playgroud)

当然,错误C3229失败了(不允许对泛型类型参数进行间接).如果我删除'^',则错误是C3149(此处不能使用此类型而没有顶级'^').这很容易在VB.Net中完成(事实上,我正在迁移现有的VB.Net类!),但在C++中,我似乎已经走到了死胡同.这在C++/CLI中实际上是不可能的吗?

提前致谢.

generics collections c++-cli

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

从C++/CLI加载相互依赖的程序集

我想从C++/CLI加载两个程序集; 程序集A取决于程序集B,两者都是VB.Net项目(3.5).我希望它们从一个字节数组加载,所以我使用Assembly :: Load(),但是当我尝试从程序集A实例化一个类时,框架忽略了先前加载的程序集B并尝试再次加载它,这会失败,因为它不在搜索路径中.程序集的"名称"是相同的,所以我不知道它为什么会失败.出于测试目的,我的程序直接从编译的图像加载字节,但实际代码将以不同方式加载.这是我的测试代码:

#include "stdafx.h"

using namespace System;
using namespace System::Windows::Forms;
using namespace System::IO;
using namespace System::Reflection;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    array<unsigned char>^   bytes;
    FileStream^     f;

    f = gcnew FileStream(L"c:\\...\\AssemblyB.dll", FileMode::Open);
    bytes = gcnew array<unsigned char>((int)f->Length);
    f->Read( bytes, 0, (int) f->Length );
    f->Close();
    f = nullptr;
    Assembly^   assemblyb = Assembly::Load(bytes);

    f = gcnew FileStream(L"c:\\...\\AssemblyA.dll", FileMode::Open);
    bytes = gcnew array<unsigned char>((int)f->Length);
    f->Read( bytes, 0, (int) f->Length );
    f->Close();
    f = nullptr;
    Assembly^   assemblya = Assembly::Load(bytes);

    bytes = nullptr; …
Run Code Online (Sandbox Code Playgroud)

c++-cli filenotfoundexception assembly.load

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