上周我在C#中写了几行代码,将一个大文本文件(300,000行)激活到一个Dictionary中.编写花了十分钟,并在不到一秒的时间内执行.
现在我将这段代码转换为C++(因为我需要在旧的C++ COM对象中).到目前为止,我已经花了两天时间.:-(虽然生产力差异本身令人震惊,但这是我需要一些建议的表现.
加载需要7秒钟,甚至更糟糕的是:之后需要花费很多时间来释放所有CStringW.这是不可接受的,我必须找到一种方法来提高性能.
有没有机会我可以分配这么多字符串而不会看到这种可怕的性能退化?
我现在的猜测是,我必须将所有文本填充到一个大型数组中,然后让我的哈希表指向此数组中每个字符串的开头并删除CStringW内容.
但在那之前,你有C++专家的建议吗?
编辑:我给自己的答案如下.我意识到这对我来说是最快的路径,也是我认为正确的方向 - 更多托管代码.
当你需要拥有非常小的物体时,比如说它包含2个浮动属性,并且你将拥有数百万个不会立即被"摧毁"的物体,结构是更好的选择还是类?
就像在xna中作为库一样,有point3s等作为结构但是如果你需要长时间保持这些值,它会造成性能威胁吗?
我目前正在构建一个由几个组件组成的应用程序,每个组件本质上都是一个WPF用户控件,周围有一些C#代码,以便插件系统工作(使用MEF).
我遇到的问题是每个组件都应该包含一个图标,为了更好的目的,我将其定义为,System.Windows.Media.Brush所以我可以使用DrawingBrush从那里导出的设计.现在我需要从非WPF C#访问那段XAML,其中我目前有实例化用户控件并要求它获取资源的可怕解决方法:
private Brush CachedIcon = null;
public override Brush Icon
{
get
{
if (CachedIcon == null)
{
CachedIcon = (Brush)(new BlahControl().TryFindResource("Icon"));
}
return CachedIcon;
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到ResourceDictionary从"普通"C#类读取该资源(这是一个.xaml文件,并在自定义控件中引用)的方法.属于WPF的任何东西都有这个不错的TryFindResource方法但是怎么办呢?我不希望XAML文件的图标位于未嵌入的位置.
在我正在研究的Perl脚本中,我需要从其他几个矩阵中构建一个矩阵.我看过CPAN中的几个模块(Math :: Matrix,PDL :: Matrix,Math :: Cephes :: Matrix),但这些模块似乎都不支持这个.
在Octave,这很容易.这是一个类似于我正在尝试做的事情的例子:
octave:1> A = [ 1, 2; 3, 4 ]
A =
1 2
3 4
octave:2> B = [ 5, 6; 7, 8 ]
B =
5 6
7 8
octave:3> C = [ 9, 10; 11, 12 ]
C =
9 10
11 12
octave:4> D = [ 13, 14; 15, 16 ]
D =
13 14
15 16
octave:5> E = [ …Run Code Online (Sandbox Code Playgroud) 假设我有一组模板使用single(float)或doubleprecision 的函数和类.当然,我只能写两段引导代码,或者乱用宏.但我可以在运行时切换模板参数吗?
我正在使用这个代码:
$target = 'extracted/' . $name[0];
$scan = scandir($target);
Run Code Online (Sandbox Code Playgroud)
扫描用于zip上传的文件夹的目录.我希望能够找到我$target文件夹中的所有文件夹,这样我就可以删除它们及其内容,只留下目录中的$target文件.
一旦我返回了文件夹的内容,我不知道如何区分文件夹和文件以便能够删除文件夹.
另外,我被告知该rmdir()功能无法删除其中包含内容的文件夹,有什么方法吗?
谢谢,本.
我有一个Web服务方法,它将网络登录(字符串)作为参数.登录是从JavaScript编码的URL,因此DOMAIN\USERNAME被编码为DOMAIN%5CUSERNAME.当我在字符串上使用HttpUtility.URLDecode时,它会转义反斜杠并给我DOMAIN \\ USERNAME.我试图将它传递给配置文件提供程序(它只需要一个反斜杠)并且什么也没得到.
我试图做string.Replace()以及RegEx.Replace()并且似乎无法摆脱第二个反斜杠.
有谁知道解决这个问题的方法?现在,这只是一个概念证明,因为我不是网络用户名作为参数发布的粉丝; 但是,我仍然很想知道解决这个问题的方法.如果我不能从C#解决这个问题,我可以/应该在JavaScript端使用不同的编码方案吗?
有人能指出我使用XML文件而不是数据库来解释实体框架的好教程吗?我已经看过一些关于SQL数据库的好教程,但是我无法跨越XML文件.
谢谢!
使用ASP.NET流式传输文件的最佳方法是什么?
似乎有各种方法,我目前在http处理程序中使用Response.TransmitFile()方法,该方法直接将文件发送到浏览器.这用于各种事情,包括从Webroot外部发送FLV到嵌入式Flash视频播放器.
但是,这似乎不是一种可靠的方法.特别是,Internet Explorer(7)存在一个奇怪的问题,浏览器只是在观看一两个视频后挂起.单击任何链接等都没有任何效果,并且在网站上重新运行工作的唯一方法是关闭浏览器并重新打开它.
这在其他浏览器中也会发生,但更不频繁.基于一些基本的测试,我怀疑这与文件流的方式有关...也许连接没有正确关闭,或者沿着这些线路.
在尝试了几个不同的东西后,我发现以下方法对我有用:
Response.WriteFile(path);
Response.Flush();
Response.Close();
Response.End();
Run Code Online (Sandbox Code Playgroud)
这解决了上述问题,查看视频不再导致Internet Explorer挂起.
但是,我的理解是Response.WriteFile()首先将文件加载到内存中,并且假设流式传输的某些文件可能非常大,这似乎不是一个理想的解决方案.
我很想知道其他开发人员如何在ASP.NET中传输大文件,特别是流式传输FLV视频文件.