[libreoffice-dev] - ScalcBT.cxx C++ using new uno bootsrap is slow
Rai, Neeraj
neeraj.rai at citi.com
Mon Dec 31 08:58:39 PST 2012
Hi Guys,
I tried to modified my original slow example to use array updates (setDataArray) based on the example in the wiki.
http://wiki.openoffice.org/wiki/Calc/API/Programming
When I call setDataArray(arr1), the program terminates with error on screen "***Error couldn't get sheet"
The relevant portion of code is pasted below. I get CellRangeData. I prepare a sequence of sequence and call cellrangedata->setDataArray(SofS)
Would someone be able to point out what is wrong here?
Thanks
Neeraj
==================== portion of attached code giving me problems:
void fillLines (Reference< XSpreadsheetDocument > myDoc)
{
printf("Fill the lines\n");
Reference < XSpreadsheets > xSheets = myDoc->getSheets() ;
Reference < XIndexAccess > oIndexSheets ( xSheets, UNO_QUERY);
Any any = oIndexSheets->getByIndex(0);
Reference < XSpreadsheet > xSheet ( any, UNO_QUERY);
// Reference < XCellRange > xCellRange = xSheet->getCellRangeByPosition (0, 0, X, Y);
// Reference < XCellRangeData > xCellRangeData (xCellRange, UNO_QUERY);
Reference< XModel > rSpreadsheetModel (myDoc, UNO_QUERY);
Reference< XInterface > rInterface = rSpreadsheetModel->getCurrentSelection();
Reference< XCellRange > xCellRange(rInterface,UNO_QUERY);
Reference< XCellRangeData> xCellRangeData(xCellRange, UNO_QUERY);
Sequence < Sequence < Any > > arr1 (X+1);
Sequence < Any > arr2 (Y+1);
for (int ii=0; ii < 120; ++ii)
{
for (int jj=0; jj < X; ++jj)
{
for (int kk=0; kk < Y; ++kk)
{
int val = jj+kk+ii+2;
arr2[kk+1] <<= val;
}
arr1[jj+1] = arr2;
}
printf("[%d] b4 set data array\n", ii);
xCellRangeData->setDataArray(arr1);
printf("[%d] set data array\n", ii);
}
//***************************************************************************
}
-----Original Message-----
From: Rai, Neeraj [ICG-MKTS]
Sent: Friday, December 28, 2012 3:56 PM
To: 'libreoffice at lists.freedesktop.org'
Subject: [libreoffice-dev] - ScalcBT.cxx C++ using new uno bootsrap is slow
Hi ,
Hope this is the right forum for the question below. If not, please point me in the right direction.
I have written a new version of Scalc.java in C++, this time using UNO bootstrap mentioned in examples/DevelopersGuide/Components/CppComponents.
The last version I wrote used examples/cpp/DocumentLoader and examples/java/Scalc.java. It expected soffice listening on a port and was too slow.
Even this version is not as fast as I would have expected, and I would like to know what may be done to speed it up.
The 500x12 cell updated 120 times in 60sec. I used gettimeofday to measure time for 3 cases writing same amount of data :
A) write 5000 rows of 12 cols (~60sec)
B) write 5000x12 entries to a single cell (~40sec)
C) write 10 rows of 50 cols, 120 times (~60sec)
If I read a file with 100,000x12 cell from disk, it takes 20 seconds - so I am hopeful that this example can be speeded up.
The box is running RHEL 6.3, 2 cpu with 4 cores and 16GB of RAM.
The attached files can be dropped into any cpp example dir and built. The makefile is copied from DocumentLoaded.
Any pointers/googlable keywords/web links would be highly appreciated.
Thanks
Neeraj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Makefile
Type: application/octet-stream
Size: 2269 bytes
Desc: Makefile
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20121231/9436b5ac/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SCalcBT.cxx
Type: application/octet-stream
Size: 12626 bytes
Desc: SCalcBT.cxx
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20121231/9436b5ac/attachment-0003.obj>
More information about the LibreOffice
mailing list