我想知道新的C#5.0异步功能对于Rx - Reactive Extensions意味着什么?它似乎不是替代品,但它们似乎重叠 - Task而且IObservable.
你的心理模型是什么?它是如何实现的?它有哪些优点和缺点?MATLAB GC与Python GC?
我有时会在使用MATLAB嵌套函数时看到奇怪的性能瓶颈,否则看起来无关紧要,我确信这是因为GC.垃圾收集器是VM的重要组成部分,Mathworks不会将其公开.
我的问题是关于MATLAB自己的堆和GC!不是关于Java/COM对象的处理/防止"内存不足"错误/堆栈变量的分配.
多年来,在阅读其他代码时,我遇到并收集了一些MATLAB语法的例子,这些例子起初可能不常见且违反直觉.请随时评论或补充此列表.我用r2006a验证了它.
MATLAB 总是将函数的第一个输出参数(如果它至少有一个)返回到其调用者工作空间,如果调用函数而不返回参数,myFunc1(); myFunc2();则调用者工作空间仍然会包含第一个输出myFunc2();为"不可见" ans变量.如果它ans是一个参考对象,它可以发挥重要作用- 它将保持活力.
set([], 'Background:Color','red')
Run Code Online (Sandbox Code Playgroud)
MATLAB有时很宽容.在这种情况下,将属性设置为对象数组也可以使用无意义属性,至少在数组为空时.这种阵列通常来自harray = findobj(0,'Tag','NotExistingTag')
myArray([1,round(end/2)])
Run Code Online (Sandbox Code Playgroud)
end关键字的使用可能看起来不干净,但有时非常方便而不是使用length(myArray).
any([]) ~= all([])
Run Code Online (Sandbox Code Playgroud)
惊人地any([])返回false并all([])返回true.我一直认为那all更强大any.
编辑:
与不为空的参数all()返回true给值的子集为其中any()返回true(例如真值表).这意味着any() false暗示all() false.MATLAB以[]参数的形式违反了这个简单的规则.
洛伦还在博客上写了这篇文章.
Select(Range(ExcelComObj))
Run Code Online (Sandbox Code Playgroud)
程序样式COM对象方法调度.不要奇怪exist('Select')回报为零!
[myString, myCell]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,MATLAB将字符串变量隐式转换myString为单元格类型{myString}.如果我不希望它这样做,它也可以工作.
[double(1.8), uint8(123)] => 2 123 …Run Code Online (Sandbox Code Playgroud) 关于MATLAB的事实:
我的问题:
MATLAB不提供后台线程,因此为了使MATLAB UI响应,我们必须调用刷新Swing EDT队列的函数drawow,也可以在这里和这里看到.这是一个众所周知的事实,到目前为止一直很好.
但是现在我有一个客户,其执行计算的代码是一个MATLAB p文件(加密),因此我无法访问代码drawnow.
不成功的尝试:
我尝试使用计时器来完成调用的工作,drawnow但它似乎不起作用 - 计时器本身需要一个先例drawnow来触发它的回调.
编辑:最后我实现了GUI与.NET/WPF在另一个线程上运行,因此它始终响应并且看起来比原始MATLAB好得多.
我正在使用WPF Toolkit的DataGrid.我在DataGrid上启用了属性以允许多行选择行.如何获取SelectedItems?我正在使用MVVM框架将我的ViewModel绑定到我的View.
谢谢!
我有一个需要很长时间才能运行的功能.当我对它进行分析时,我发现超过一半的时间(50秒中的26个)没有计入逐行时序故障,我可以证明在函数完成运行之后但在它返回控制之前花费的时间通过以下方法:
ts1 = tic;
disp ('calling function');
functionCall(args);
disp (['control returned to caller - ', num2str(toc(ts1))]);
Run Code Online (Sandbox Code Playgroud)
我调用的函数的第一行是ts2 = tic,最后一行是
disp (['last line of function- ', num2str(toc(ts2))]);
Run Code Online (Sandbox Code Playgroud)
结果是
调用功能
最后一行功能 - 24.0043
控制权返回给来电者 - 49.857
在互联网上闲聊,我认为这是MATLAB管理内存的方式的症状.它在函数返回时释放,有时这需要很长时间.该函数确实分配了一些大的(~1百万个元素)数组.它也适用于句柄,但不会显式创建任何新的句柄对象或存储句柄.我的问题是:
在考虑MATLAB中基于句柄类的ORM的可能性时,出现了缓存实例的问题.我无法立即想出一种制作弱引用或弱映射的方法,尽管我猜测可以用事件监听器来设计一些东西.有任何想法吗?
在MATLAB中,句柄类(与值类相对)具有引用语义.MATLAB中包含的一个示例是containers.Map该类.如果实例化一个并将其传递给函数,则函数对该对象所做的任何修改都将通过原始引用可见.也就是说,它的工作方式类似于Java或Python对象引用.
与Java和Python一样,MATLAB以一种或另一种方式跟踪引用句柄类的每个对象的内容.如果没有,MATLAB知道删除对象是安全的.
弱引用是指引用对象但不计入垃圾收集目的的引用.因此,如果对象的唯一剩余引用很弱,那么它可以被抛弃.通常可以向弱引用提供事件或回调 - 当对象被丢弃时,将通知对它的弱引用,允许清理代码运行.
例如,弱值映射就像普通映射,除了值(与键相对)被实现为弱引用.弱映射类可以在每个弱引用上安排回调或事件,以便在删除引用的对象时,删除映射中的键/值条目,使映射保持整洁.
这篇文章是通过讨论单元数组是否为"正常数组"并且向量化不适用于单元数组来触发的.
我想知道为什么在MATLAB中没有实现后面的矢量化语法,它反对它:
>> {'hallo','matlab','world'} == 'matlab'
??? Undefined function or method 'eq' for input arguments of type 'cell'.
Run Code Online (Sandbox Code Playgroud)
在内部它将等同于
[{'hallo'},{'matlab'},{'world'}] == {'matlab'}
Run Code Online (Sandbox Code Playgroud)
因为MATLAB知道何时投射,以下工作:
[{'hallo','matlab'},'world']
Run Code Online (Sandbox Code Playgroud)
Cell数组是一个指针数组.如果左侧和右侧都指向相同的对象,isequal('hallo','hallo')则按预期返回true,那么为什么MATLAB仍然不允许最顶层的示例?
我知道我可以使用strmatch或cellfun.
摘要:
==这是需要向量化在上面的例子中是eq与不isequal(其它运营商<是lt等)eq 内置数值类型,适用于所有其他类型(如字符串)MATLAB提供了重载此(和其他)运算符的自由.myFun( myString )或的函数矢量化myFun( myCellOfStrings )也是可能的,你只需在内部实现它myFun.功能sin(val)和sin(array)工作也不是巫术,而是因为这两种情况都是在内部实施的.这两个功能disp并display没有返回参数,并显示变量的内容到命令行窗口.
我想将函数调用的结果(显示的字符串)转换为变量而不是输出到命令窗口,这样的str = ToString( myStruct );输入变量是一个MATLAB结构!
我知道显示结果取决于命令窗口的可用宽度,它可以是宽或窄.
在所有现代编程语言中,它都是一种obj.ToString()方法.
我打算KeyValuePair在比较密集的代码中使用,并且很困惑地检查它是如何在.NET中实现的(s.下面)
为什么它不会覆盖Equals和GetHashCode效率(而不是实现==),而是使用基于慢反射的默认实现?
我知道结构/值类型有一个基于它们GetHashCode()和Equals(object)方法的反射的默认实现,但是我认为如果你做了很多比较,那么与覆盖相等相比它是非常低效的.
编辑我做了一些测试,发现在我的场景(WPF列表)默认KeyValuePair和我自己的结构覆盖实现,GetHashCode()并且Equals(object)比作为类的实现慢得多!
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Interface: KeyValuePair
**
** <OWNER>[....]</OWNER>
**
**
** Purpose: Generic key-value pair for dictionary enumerators.
**
**
===========================================================*/
namespace System.Collections.Generic {
using System;
using System.Text;
// A KeyValuePair holds a key and a value from a dictionary.
// It …Run Code Online (Sandbox Code Playgroud) 我收到以下错误:
"COM object that has been separated from its underlying RCW cannot be used."
Run Code Online (Sandbox Code Playgroud)
我确信问题是因为 COM 对象不是在它创建的线程上被调用 - STA。我尝试实现 IDisposable 但它对我不起作用。
有几个帖子处理类似的问题,但仍然没有解决我的问题:
从终结器调用 RCW 安全吗? 在我的析构函数中释放 Excel 对象
谁能发布一个示例/解释如何从另一个线程正确访问 COM 对象?
这是显示问题的最小代码:
using System;
using System.Threading;
namespace Test.ComInterop
{
public class Program
{
MyCom _myCom;
[STAThread]
static void Main( string[] args )
{
new Program();
}
public Program()
{
_myCom = new MyCom();
// this method call works
string version = _myCom.ComMethod();
StartThread();
}
private void StartThread()
{
Thread t …Run Code Online (Sandbox Code Playgroud) matlab ×7
c# ×3
wpf ×2
.net ×1
async-await ×1
asynchronous ×1
c#-5.0 ×1
com ×1
datagrid ×1
interop ×1
java ×1
keyvaluepair ×1
mvvm ×1
swing ×1
value-type ×1
wpftoolkit ×1